【发布时间】:2014-06-12 10:55:25
【问题描述】:
我遇到了一个问题,当我尝试使用护照登录时,页面没有重定向。授权返回true(用户名、密码正确)。
我很确定它在我的 validPassword 函数中的某个地方,但我不确定。
登录路径
app.get('/login', function (req, res) {
res.render('login', {});
});
登录帖子
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
用户原型
User.prototype.validPassword = function(username, unhashedPassword) {
async.waterfall([
function (callback) {
User.find({ "username" : username }, function (err, data) {
if(err) return handleError(err);
callback(null, data);
});
},
function (data, callback) {
var isGood = passwordHash.verify(unhashedPassword, data[0].password);
callback(null, isGood);
}
], function (err, result) {
return result;
});
};
本地策略
passport.use(new LocalStrategy(
function(username, password, done) {
var unhashedPassword = password;
var passedUsername = username;
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(passedUsername, unhashedPassword)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
没有错误打印到我的控制台,所以我现在有点困惑。 isGood 是否以错误的格式返回?任何帮助都会很棒。
【问题讨论】:
-
它是否重定向到正确的子域? (127.0.0.1 或本地主机)?
-
@PSeUdocode 如果我在 127.0.0.1 上,它会重定向到 127.0.0.1,本地主机也是如此。发生的情况是,您输入您的信息并点击登录,网址栏从
/login到/再到/login,所有这些都在同一序列内,这意味着授权不正确。它给了我一个 302 错误,但我的app.post('/login')路由显然在那里。
标签: node.js passport.js passport-local