我正在尝试使用Sequelize和Passport在Node应用中验证用户身份。我能够访问我的数据库,但似乎无法获得积极的结果。基本上,我有一个简单的前端表单,接受用户名和密码(使用相应的名称"用户名"和"密码")然后是以下Passport定义:
passport.use(new localStrategy(
{usernameField: 'email'},
function(req, email, password, done) {
models.TeacherX.findOne({ email: email }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
然后我称之为:
router.post('/login',
passport.authenticate('local', { failureRedirect: '/login?msg=failure'}),
function(req, res) {
res.redirect("/?msg=positive");
});
答案 0 :(得分:1)
由于您要将请求传递给验证回调,因此您需要将属性passReqToCallback
设置为true
或从验证回调中删除req
参数。试试这个:
passport.use(new localStrategy(
{passReqToCallback: true ,
usernameField: 'email'},
function(req, email, password, done) {
models.TeacherX.findOne({ email: email }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));