function getJwtStrategy(db, settings) { const opts = {}; opts.secretOrKey = settings.jwtSecret || 'Ch4nG3 Th15'; opts.algorithms = [settings.jwtAlgorithm || 'HS256']; opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); const jwtStrategy = new JwtStrategy(opts, (payload, done) => { db.findById(settings.usersTable || 'users', payload.sub) .then((user) => { if (!user) { return done(null, false, { message: 'This user is not registered' }); } return done(null, user); }) .catch((err) => { done(err, null, { message: 'Error connecting to database' }); }); }); return jwtStrategy; }
passport.use(new JwtStrategy(opts, async function (jwt_payload, done) { let query = jwt_payload.email ? {email: jwt_payload.email} : {id: jwt_payload.uid}; let user = (await User.find(query))[0]; if (user.data) { if (user.data.status === "suspended") { return done(null, false, {"message": "account suspended"}); } done(null, user); } else { done(null, false); } }));
passport.use(new JwtStrategy({ jwtFromRequest: cookieExtractor, secretOrKey: configs.jwt.authentication.secret, }, (jwtPayload, done) => { // this callback is invoked only when jwt token is correctly decoded User.findById(jwtPayload._id, handleDbError(res)((user) => { done(null, user); })); }));
// Change this to only use your own secret token passport.use(new StrategyJWT(options, async (jwtPayload, done) => { let user try { user = await users.getById(jwtPayload.id) } catch (error) { console.log(error) return done(error, null) } if (!user) { return done(null, false) } return done(null, user) }))