gpt4 book ai didi

javascript - Nodejs - Passport 身份验证总是返回失败重定向

转载 作者:行者123 更新时间:2023-11-30 16:31:43 26 4
gpt4 key购买 nike

我正在通过 passportJs 制作一个表单登录,它总是返回 failureRedirect。我在堆栈溢出中搜索了这个问题,但仍然没有正确的答案。这是我的代码:

  • 制表 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 使用 Express 框架形式的 Nodejs 和 passport 中间件:

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('/');
});

最佳答案

查看您在评论中分享的 getUserByUsername 函数,看起来您没有以正确的方式调用 getUserByUsername 的回调函数,因此它没有得到 user 对象导致重定向失败。您分享的功能是:

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

将其更改为以下应该可以解决您的问题:

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

关于javascript - Nodejs - Passport 身份验证总是返回失败重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com