discord.js (1468B)
1 const passport = require("passport"); 2 const { Strategy } = require("passport-discord"); 3 const db = require("../models/user"); 4 const config = require("../config"); 5 passport.serializeUser(async (user, done) => { 6 try { 7 done(null, user.id); 8 } catch (e) { 9 done(null, null); 10 } 11 }); 12 passport.deserializeUser(async (obj, done) => { 13 const user = await db.findOne({ id: obj }); 14 if (user) done(null, user); 15 }); 16 passport.use( 17 new Strategy( 18 { 19 clientID: process.env.CLIENT_ID, 20 clientSecret: process.env.CLIENT_SECRET, 21 callbackURL: process.env.CALLBACK_URL, 22 scope: config.scope, 23 }, 24 async (accessToken, refreshToken, profile, done) => { 25 const { id, username, avatar } = profile; 26 const data = await db.findOne({ username }); 27 if (data) { 28 data.accessToken = accessToken; 29 data.refreshToken = refreshToken; 30 data.username = username; 31 data.guilds = profile.guilds.map(g => g.id); 32 data.avatar = `https://cdn.discordapp.com/avatars/${id}/${avatar}`; 33 data.save(); 34 done(null, data); 35 } else { 36 const ndb = { 37 id, 38 username, 39 avatar: `https://cdn.discordapp.com/avatars/${id}/${avatar}`, 40 refreshToken, 41 accessToken, 42 guilds: profile.guilds.map(g => g.id), 43 }; 44 const nd = new db(ndb).save(); 45 done(null, nd); 46 } 47 } 48 ) 49 );