Spaces:
Sleeping
Sleeping
const { Strategy: DiscordStrategy } = require('passport-discord'); | |
const User = require('../models/User'); | |
const config = require('../../config/loader'); | |
const domains = config.domains; | |
const discordLogin = async () => | |
new DiscordStrategy( | |
{ | |
clientID: process.env.DISCORD_CLIENT_ID, | |
clientSecret: process.env.DISCORD_CLIENT_SECRET, | |
callbackURL: `${domains.server}${process.env.DISCORD_CALLBACK_URL}`, | |
scope: ['identify', 'email'], // Request scopes | |
authorizationURL: 'https://discord.com/api/oauth2/authorize?prompt=none', // Add the prompt query parameter | |
}, | |
async (accessToken, refreshToken, profile, cb) => { | |
try { | |
const email = profile.email; | |
const discordId = profile.id; | |
const oldUser = await User.findOne({ email }); | |
if (oldUser) { | |
return cb(null, oldUser); | |
} | |
let avatarURL; | |
if (profile.avatar) { | |
const format = profile.avatar.startsWith('a_') ? 'gif' : 'png'; | |
avatarURL = `https://cdn.discordapp.com/avatars/${profile.id}/${profile.avatar}.${format}`; | |
} else { | |
const defaultAvatarNum = Number(profile.discriminator) % 5; | |
avatarURL = `https://cdn.discordapp.com/embed/avatars/${defaultAvatarNum}.png`; | |
} | |
const newUser = await User.create({ | |
provider: 'discord', | |
discordId, | |
username: profile.username, | |
email, | |
name: profile.global_name, | |
avatar: avatarURL, | |
}); | |
cb(null, newUser); | |
} catch (err) { | |
console.error(err); | |
cb(err); | |
} | |
}, | |
); | |
module.exports = discordLogin; | |