javascript - 护照身份验证 - LocalStrategy 永远不会被调用
问题描述
我正在尝试使用 LocalStrategy 对 Passor 进行身份验证。问题是这个策略似乎永远不会被调用,如果我在我的 passport.authenticate 中记录用户对象,它会返回“false”。
这是我的代码客户端:
logIn = () => {
const username = this.state.mail;
const password = this.state.password;
console.log("stringify " + JSON.stringify({username, password}));
fetch('http://localhost:3001/api/logIn',
{
method: 'POST',
headers: {'Content-Type': 'application/json'
/*'Access-Control-Allow-Origin': '*'*/},
body: JSON.stringify({username, password})
}).then(res => res.json()).then((res) => {
if (!res.success) console.log("fallito");
else console.log(res.username);
});
}
这是策略:
passport.use(new LocalStrategy(
{ usernameField: "mail" },
(username, password, done) => {
console.log("Inside localStrategy");
User.findOne({ mail: username.toLowerCase() }, (err, user) => {
if (err) {
console.log("not found " + err);
return done(err); }
if (!user) {
console.log("not users")
return done(undefined, false, { message: `Email ${mail} not found.` });
}
user.comparePassword(password, (err, isMatch) => {
if (err) {
console.log("password not correct " + err);
return done(err); }
if (isMatch) {
console.log("match");
return done(undefined, user);
}
console.log("invalid password")
return done(undefined, false, { message: "Invalid email or password." });
});
});
}));
这里调用passport.authenticate:
router.post('/logIn', (req, res, next) =>{
console.log('Inside Login post ' + req);
const user = new User();
const {username, password} = req.body;
user.mail = username;
user.password = password;
passport.authenticate('local', (err, user, info) => {
console.log('Inside Login authenticate ' + user.mail);
if (err) { return next(err); }
if (!user) { return res.redirect('/'); }
// req / res held in closure
req.logIn(user, function(err) {
console.log('Inside Login login ' + user);
if (err) { return next(err); }
return res.json({
success: true,
username: req.user.name
});
});
})(user, res, next);
/*
console.log("in authentication: " + req);
return res.json({
success: true,
username: req.user.name
});
}
)(req,res,next);*/
});
请注意,我一直在尝试传递一个 User 对象,就像上面的代码一样,并直接传递 req var。
解决方案
在登录路由中,您正在local
使用 passport.authenticate 调用策略,但您尚未创建local
策略。
请试试
passport.use('local', new LocalStrategy(
代替
passport.use(new LocalStrategy(
推荐阅读
- groovy - 在声明性 Jenkins 管道中存储环境变量中的值列表
- mysql - 逐一获取列数据
- r - 从 R 调用 openmp 的 C 代码给出不一致的结果
- php - 如何从gmail API的邮件中提取PHP中的html数据?
- mule - 如何在不使用 API 管理器的情况下在 Mule 4 中配置 CORS?
- angular - 为什么在导入文本编码 polyfill 后在 IE11 中出现“ReferenceError: 'TextEncoder' is undefined”?
- vhdl - Altera Cyclone III 片上 ram 延迟
- sql - 存在失败进入存储过程
- kendo-grid - Kendo MVC Grid 第 8 列禁用其他列上的 MinScreenWidth 属性
- swift - 如何使用生成的访问器一对多的 NSManagedObject 类?