Spaces:
Running
Running
| 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; | |