Nodejs - Passport认证总是返回失败重定向
Nodejs - Passport authenticate always return failure redirect
我正在通过passportJs进行表单登录,它总是返回failureRedirect。我在堆栈溢出搜索这个问题,但仍然没有正确的答案。下面是我的代码:
-
形造形玉:
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 handlde使用express framework形式的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);
});
}
相关文章:
- 如何避免JSON.stringify在特殊情况下返回undefined,从而为JSON.parse创建字符串失败
- Angular Cross Origin Request CORS失败,但节点http.get()成功返回
- 承诺,如果第一个失败,则返回第二个承诺结果
- AngularJS$http返回200正常,但失败了
- 测试Ember.JS应用程序失败,返回ReferenceError:未定义Ember
- Parse.com失败,返回:ReferenceError
- 返回按钮回调函数在特定情况下失败或未启动
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- 如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺
- IE7 jquery 选择器返回“失败”
- 当返回的查询不为空时,来自 php 的 MS SQL Server 过程失败并显示 500
- 将延迟对象作为失败返回
- 万一函数失败,什么是好的返回值
- 使用延迟对象/承诺的Ajax调用返回失败
- 成功的$.Ajax和$.Post调用总是从C#返回失败
- Nodejs - Passport认证总是返回失败重定向
- FireFox中HTML/iframe错误-组件返回失败代码:0x80004005 (NS_ERROR_FAILURE)
- 组件返回失败码:0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarg
- Http请求返回失败,但实际上是成功的
- 组件返回失败码:0x80040111 (NS_ERROR_NOT_AVAILABLE)