pat*_*ter 5 node.js passport-local passport.js
我遇到了一个问题,当我尝试使用护照登录时,页面不会重定向.授权返回true(正确的用户名,密码).
我很确定它位于我的validPassword功能中,但我不确定.
登录路线
app.get('/login', function (req, res) {
res.render('login', {});
});
Run Code Online (Sandbox Code Playgroud)
登录发布
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
Run Code Online (Sandbox Code Playgroud)
用户原型
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;
});
};
Run Code Online (Sandbox Code Playgroud)
地方战略
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);
});
}
));
Run Code Online (Sandbox Code Playgroud)
没有错误打印到我的控制台,所以我现在有点困惑.是否以isGood错误的格式返回?任何帮助都会很棒.
我想出了我的问题.问题在于我的本地策略和我的validPassword原型.
在我的策略中,我有一个console.log说错误,无效的用户名或错误,密码无效.console.log我的prototype印刷中也有一个评价passwordHash.verify(unhashedPassword, this.password).
当我发布登录时,控制台将打印如下:
LOG: valid username (Strategy)
LOG: invalid password (Strategy)
LOG: true (Prototype)
Run Code Online (Sandbox Code Playgroud)
遵循逻辑流程,LOG: true (prototype) 应该出现在之前,LOG: invalid password (Strategy)但它出现之后意味着在某处出现同步问题.
好吧,我通过删除大约15行代码解决了问题,现在它就像一个漂亮的工作.
这就是我的auth策略现在的样子.
User.prototype.validPassword
User.prototype.validPassword = function(unhashedPassword) {
return passwordHash.verify(unhashedPassword, this.password);
};
Run Code Online (Sandbox Code Playgroud)
LocalStrategy
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
var unhashedPassword = password;
var passedUsername = username;
process.nextTick(function () {
User.findOne({ username: passedUsername }, function(err, user) {
console.log('within local strategy', user);
if (err) {
console.log('Error:', err);
return done(err);
}
if (!user) {
console.log('Incorrect username:');
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(unhashedPassword)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
});
}
));
Run Code Online (Sandbox Code Playgroud)
POST登录
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5317 次 |
| 最近记录: |