简体   繁体   English

Node.js-Passport身份验证始终返回失败重定向

[英]Nodejs - Passport authenticate always return failure redirect

I'm making a form login by passportJs and it always return failureRedirect. 我正在通过passportJs进行表单登录,它总是返回failureRedirect。 I have search in stack overflow for this issue, but still not have the correct answer. 我已经在堆栈溢出中搜索了此问题,但仍然没有正确的答案。 Here is my code: 这是我的代码:

  • Form making form jade: 造型玉器:

     form(method='post', action='/users/login', enctype='multipart/form-data') .form-group label Username input.form-control(name='username', type='text' placeholder='Enter Username') .form-group label Password input.form-control(name='password', type='password' placeholder='Enter password') input.btn.btn-default(name='submit', type='submit', value='Login') 

Router Hanlde is using express framework form Nodejs and passport middleware: 路由器Hanlde使用Node.js和护照中间件的快速框架:

passport.serializeUser(function(user, done) {
 done(null, user.id);
});

passport.deserializeUser(function(id, done) {
User.getUserById(id, function(err, user) {
    done(err, user);
});
});

passport.use(new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
},
function(username, password, done) {
    User.getUserByUsername(username, function(err, user) {
        if (err) throw err;
        if (!user) {
            console.log('Unknown User');
            return done(null, false, {
                message: 'Unknown User'
            });
        }

        User.comparePassword(password, user.password, function(err, isMatch) {
            if (err) throw err;
            if (isMatch) {
                return done(null, user);
            } else {
                console.log('Invalid Password');
                return done(null, false, {
                    message: 'Invalid Password'
                });
            }
         });
      });
   }
));

  router.post('/login', passport.authenticate('local', {
    failureRedirect: '/users/login',
    failureFlash: 'Invalid username or password'
}), function(req, res) {
console.log('Authentication Successful');
req.flash('success', 'You are logged in ');
res.redirect('/');
 });

Looking at getUserByUsername function you shared in comments, it looks like you are not making call to callback function of getUserByUsername in correct way and therefore it is not getting user object resulting into failure redirect. 查看您在注释中共享的getUserByUsername函数,似乎您没有以正确的方式调用getUserByUsername回调函数,因此未获取导致失败重定向的user对象。 The function you shared was: 您共享的功能是:

module.exports.getUserByUsername = function(username, callback){
  var query = {username: username}; 
  User.findOne(query, callback); 
} 

Changing it to following should fix your issue: 将其更改为以下应该可以解决您的问题:

module.exports.getUserByUsername = function(username, callback){
  var query = {username: username}; 
  User.findOne(query, function(err, user) {
    callback(err, user);
  }); 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM