36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
const JwtStrategy = require('passport-jwt').Strategy;
|
|
const BearerStrategy = require('passport-http-bearer');
|
|
const { ExtractJwt } = require('passport-jwt');
|
|
const { jwtSecret } = require('./vars');
|
|
const authProviders = require('../api/services/authProviders');
|
|
const User = require('../api/models/user.model');
|
|
|
|
const jwtOptions = {
|
|
secretOrKey: jwtSecret,
|
|
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('Bearer'),
|
|
};
|
|
|
|
const jwt = async (payload, done) => {
|
|
try {
|
|
const user = await User.findById(payload.sub);
|
|
if (user) return done(null, user);
|
|
return done(null, false);
|
|
} catch (error) {
|
|
return done(error, false);
|
|
}
|
|
};
|
|
|
|
const oAuth = (service) => async (token, done) => {
|
|
try {
|
|
const userData = await authProviders[service](token);
|
|
const user = await User.oAuthLogin(userData);
|
|
return done(null, user);
|
|
} catch (err) {
|
|
return done(err);
|
|
}
|
|
};
|
|
|
|
exports.jwt = new JwtStrategy(jwtOptions, jwt);
|
|
exports.facebook = new BearerStrategy(oAuth('facebook'));
|
|
exports.google = new BearerStrategy(oAuth('google'));
|