我正在尝试在我的 Sails 项目中使用本地护照进行身份验证。在我的控制器中:
passport.authenticate('local', function(err, user, info) {
if ((err) || (!user)) { res.json({message: 'Unable to authenticate'}); return; }
req.login(user, function(err) {
if (err) { res.json({message: 'Unable to login'}); console.log(err); return; }
res.json({message: 'logging in'});
});
})(req, res);
在配置文件中:
passport.use(new LocalStrategy(function(username, password, done) {
User.findOneByUsername(username).done(function(err, user) {
if (err) { return done(null, err); }
if (!user) { return done(null, false, { message: 'Incorrect User' }); }
bcrypt.compare(password, user.password, function(err, res) {
if (err) { return done(null, err); }
if (!res) { return done(null, false, { message: 'Invalid Password'}); }
return done(null, user);
});
});
}));
响应是“无法登录”。控制台输出为:[TypeError: Cannot read property 'id' of undefined]
我是新来的护照,我不完全确定它在哪里失败,因为它似乎实际上是在找到用户,并在配置文件中成功地比较了密码(一些控制台日志似乎表明了这一点)。但是 req.login 回调有一个错误,这意味着即使身份验证成功,登录也会失败。我不知道为什么会收到此错误。