Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var mongoose = require('mongoose');
- var User = mongoose.model('User');
- // Makes it work locally
- var LocalStrategy = require('passport-local').Strategy;
- var bCrypt = require('bcrypt-nodejs');
- module.exports = function (passport) {
- // Passport needs to be able to serialize and deserialize users to support persistent login sessions
- passport.serializeUser(function (user, done) {
- console.log('serializing user:', user.username);
- done(null, user._id);
- });
- passport.deserializeUser(function (id, done) {
- User.findById(id, function (err, user) {
- console.log('deserializing user:', user.username);
- done(err, user);
- });
- });
- // login
- passport.use('login', new LocalStrategy({
- passReqToCallback: true
- },
- function (req, username, password, done) {
- // check in mongo if a user with username exists or not
- User.findOne({ 'username': username },
- function (err, user) {
- // In case of any error, return using the done method
- if (err)
- return done(err);
- // Username does not exist, log error & redirect back
- if (!user) {
- console.log('User Not Found with username ' + username);
- return done(null, false)
- }
- // User exists but wrong password, log the error
- if (!isValidPassword(user, password)) {
- console.log('Invalid Password');
- return done(null, false);
- }
- // User and password both match, return user from
- // done method which will be treated like success
- return done(null, user);
- }
- );
- }));
- passport.use('signup', new LocalStrategy({
- passReqToCallback: true
- },
- function (req, username, password, done) {
- findOrCreateUser = function () {
- // find a user in Mongo with provided username
- User.findOne({ 'username': username }, function (err, user) {
- // In case of any error return
- if (err) {
- console.log('Error in SignUp: ' + err);
- return done(err);
- }
- // already exists
- if (user) {
- console.log('User already exists');
- return done(null, false);
- } else {
- // if there is no user with that email
- // create the user
- var newUser = new User();
- // set the user's local credentials
- newUser.username = username;
- newUser.password = createHash(password);
- // save the user
- newUser.save(function (err) {
- if (err) {
- console.log('Error in Saving user: ' + err);
- throw err;
- }
- console.log('User Registration succesful');
- return done(null, newUser);
- });
- }
- });
- };
- // Delay the execution of findOrCreateUser and execute
- // the method in the next tick of the event loop
- process.nextTick(findOrCreateUser);
- }));
- var isValidPassword = function (user, password) {
- return bCrypt.compareSync(password, user.password);
- };
- // Generates hash using bCrypt
- var createHash = function (password) {
- return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement