Passport js本地策略自定义回调将用户显示为false,将信息显示为“Missing credentials”

时间:2017-03-20 07:30:40

标签: angularjs node.js express passport.js passport-local

我使用的是Node.js,angularjs,express和passport。我已经尝试了所有我能想到的选择,但仍然没有解决方案。无法从其他帖子中找到此问题的解决方案。

app.post('/login', function(req, res, next) {

console.log(req.body.Email);
console.log(req.body.Password);

passport.authenticate('local', function(err, user, info) {

    console.log(err,user,info);
...

在上面的req.body在控制台中显示正确,但在护照中验证它显示为null,false和info作为缺少的凭据。

我已将以下内容用于传递端口

passport.use(new LocalStrategy({ usernameField: 'Email' }, (Email, Password, done) => {
console.log(Email, Password, done);
User.findOne({ Email: Email.toLowerCase() }, (err, user) => {
    console.log(err);
    if (err) { return done(err); }
    if (!user) {
        return done(null, false, { msg: `Email ${Email} not found.` });
    }
    user.ComparePassword(Password, (err, isMatch) => {
        if (err) { return done(err); }
        if (isMatch) {
            return done(null, user);
        }
        return done(null, false, { msg: 'Invalid email or password.' });
    });
});
}));


passport.serializeUser((user, done) => {
   // console.log(user, done);
    done(null, user.id);
});

passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        done(err, user);
    });
});

我无法理解问题存在的原因。

有人知道我在这里缺少什么吗?!?!

谢谢!

2 个答案:

答案 0 :(得分:1)

使用{ usernameField: 'Email' }而不是req.body.email,因为您发送了req.body.Email而非NumberFormat

答案 1 :(得分:0)

添加至kaxi答案我已通过在护照本地策略中添加密码字段来解决此错误,如下所示

 passport.use(new LocalStrategy({ usernameField: 'Email',passwordField: 'Password'  }, (Email, Password, done) 

取代

passport.use(new LocalStrategy({ usernameField: 'Email' }, (Email, Password, done)

相关问题