Passport: Allow sign up with name and email address? (Local Strategy)

后端 未结 6 2310
孤街浪徒
孤街浪徒 2020-12-31 01:15

Is there any way to allow a user to register on the local strategy with his password, email and name?
Every example I could find online only use name/password or email/p

6条回答
  •  南笙
    南笙 (楼主)
    2020-12-31 01:30

    var localStrategy = require('passport-local').Strategy;
    var User = require('../public/models/user');
    
    module.exports = function(passport){
    
        passport.serializeUser(function(user, done){
            done(null, user.id);
        });
    
        passport.deserializeUser(function(id, done){
            User.findById(id, function(err, user){
                done(err, user);
            });
        });
    
        passport.use('local-signup', new localStrategy({
            usernameField: 'email',
            passwordField: 'password',
            passReqToCallback: true
        },
        function(req, email, password, done){
            process.nextTick(function(){
                 User.findOne({'local.enroll': email}, function(err, user){
                     if(err)
                         return done(err);
                     if(user){
                         return done(null, false, req.flash('signupmessage', 'The email already taken'));
                     } else{
                         var newUser = new User();
                         newUser.local.enroll = email;
                         newUser.local.password = newUser.generateHash(password);                     
                         newUser.save(function(err){
                             if(err)
                                 throw err
                             return done(null, newUser);
                         });
                     }
    
                 });
            });
        }));
    
        passport.use('local-login', new localStrategy({
            usernameField: 'email',
            passwordField: 'password',
            passReqToCallback: true
        },
        function(req, email, password, done){
            process.nextTick(function(){
                 User.findOne({'local.enroll': email}, function(err, user){
                     if(err)
                         return done(err);
                     if(!user){
                         return done(null, false, req.flash('loginmessage', 'No user found'));
                     }
                     if(!user.validPassword(password)){
                         return done(null, false, req.flash('loginmessage', 'Invalid password'));
                     }
                     return done(null, user);
                 });
            });
        }));    
    }
    

提交回复
热议问题