【发布时间】:2014-01-12 12:14:54
【问题描述】:
我做错了什么?它总是重定向到失败页面,但我无法调试。
// passport
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
User = require('./models/user.js').Model;
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
console.log('entrou');
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
// login
app.get('/login', user.login);
app.post('/login',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
})
);
【问题讨论】:
-
findOne 是如何实现的?
-
另外,
err和user在登录后是否包含预期值(console.log它们)?您是否实现了passport.serializeUser和passport.deserializeUser以及 Passport 的所有其他要求? -
我遇到了类似的问题,调试显示 (!user.validPassword) 在内部方法将其设置为 true 之前返回 false。 (几乎就像它在异步方法中执行一样,但它是同步的,对吗?) - 编辑:我想通了,bcrypt 在我的 auth 函数中触发了一个异步方法 - 所以它在有机会评估之前评估 false来自 bcrypt 的回应。
标签: javascript node.js express passport.js