generator-restgoose
Version:
Modern, Lightweight, and Powerfull Rest API Code generator. Out-Of-Box NodeJS REST API Server generator built on top of Mongoose, Express, Cors, Passport, JWT and many more.
85 lines (75 loc) • 2.14 kB
JavaScript
;
// Importing Passport, strategies, and config
const User = require('../models/user');
const Config = require('../config');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const LocalStrategy = require('passport-local');
const localOptions = { usernameField: 'email' };
const redisClient = require('redis');
const Constants = require('../library').Constants;
const redis = redisClient.createClient(
Config.redis.port,
Config.redis.host,
Config.redis.opts
);
const jwtOptions = {
// Telling Passport to check authorization headers for JWT
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt'),
// Telling Passport where to find the secret
secretOrKey: Config.JWT.secret,
passReqToCallback: true
};
// Setting up JWT login strategy
const jwtLogin = new JwtStrategy(jwtOptions, function (req, payload, done) {
var token = req.get('Authorization');
redis.get(token, (err, user) => {
// console.log('reply: ', JSON.parse(user)._id);
if (err) {
return done(err, err);
}
if (user) {
done(null, JSON.parse(user));
} else {
done(null, false);
}
});
});
// Setting up local login strategy
const localLogin = new LocalStrategy(localOptions, function (
email,
password,
done
) {
const searchObj = { email: email };
if (Config.account.sendEmailVerificationOnRegistration) {
searchObj.status = Constants.Status.Active;
}
User.findOne(searchObj, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
error:
'Your login details could not be verified. Please try again.'
});
}
user.comparePassword(password, function (err, isMatch) {
if (err) {
return done(err);
}
if (!isMatch) {
return done(null, false, {
error:
'Your login details could not be verified. Please try again.'
});
}
return done(null, user);
});
});
});
module.exports = {
jwtLogin: jwtLogin,
localLogin: localLogin
};