Passport js 本地策略自定义回调将用户显示为 false,将信息显示为“缺少凭据”
Passport js local strategy custom callback showing user as false and info as “Missing credentials”
我正在使用Node.js、angularjs、快递和护照。我已经尝试了所有我能想到的选项,但仍然没有解决方案。无法从其他帖子中找到此问题的解决方案。
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 在控制台中显示正确,但在 passport 身份验证中它显示 null、false 和信息作为缺少凭据。
我使用了以下作为通行证端口
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);
});
});
我不明白为什么会出现这个问题。
有人知道我在这里错过了什么吗?!?!
谢谢!
使用 { usernameField: 'email' }
而不是 { usernameField: 'Email' }
因为你发送的是 req.body.email
而不是 req.body.Email
添加 upto kaxi answer 我已经通过在护照本地策略中添加密码字段来解决这个错误,如下所示
passport.use(new LocalStrategy({ usernameField: 'Email',passwordField: 'Password' }, (Email, Password, done)
代替
passport.use(new LocalStrategy({ usernameField: 'Email' }, (Email, Password, done)
我正在使用Node.js、angularjs、快递和护照。我已经尝试了所有我能想到的选项,但仍然没有解决方案。无法从其他帖子中找到此问题的解决方案。
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 在控制台中显示正确,但在 passport 身份验证中它显示 null、false 和信息作为缺少凭据。
我使用了以下作为通行证端口
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);
});
});
我不明白为什么会出现这个问题。
有人知道我在这里错过了什么吗?!?!
谢谢!
使用 { usernameField: 'email' }
而不是 { usernameField: 'Email' }
因为你发送的是 req.body.email
而不是 req.body.Email
添加 upto kaxi answer 我已经通过在护照本地策略中添加密码字段来解决这个错误,如下所示
passport.use(new LocalStrategy({ usernameField: 'Email',passwordField: 'Password' }, (Email, Password, done)
代替
passport.use(new LocalStrategy({ usernameField: 'Email' }, (Email, Password, done)