node.js - 2个passport.authenticate方法的区别
问题描述
这是相同的登录路径。只有2种不同的方法。
第一条路线
router.post('/login', passport.authenticate('local',{session:false}),async (req,res) => {
console.log("\n\n\n ------------------------222222")
console.log(req.user);
});
并且请求对象有用户&被显示。
而在第二条路线
router.post('/login', (req, res, next) => {
passport.authenticate('local', async (err, user, info) =>{
if(err){
console.log(err);
}
console.log("\n\n\n ------------------------")
console.log(req.user); //undefined
if(user){
// it works here
}
else{
res.status(422).json(info);
}
})(req, res, next);
});
console.log(req.user);
显示未定义。但是用户从 mongo db 中获取了用户详细信息。
有人可以解释一下吗。
解决方案
在第二个函数中,您可以获取user
密钥中的用户。但是,您必须将其添加到req
对象中。可以这样做
if(user){
// it works here
req.user = user;
}
在第一种情况下,它已经被添加到对象中,因为它在进入下一个异步函数之前req
已经执行。
如果您在 if else 之后打印,它将为您提供确切的详细信息。passport.authenticate
req.user
推荐阅读
- reactjs - 无法将所需的参数传递给反应渲染()的jsx内的函数
- javascript - 如何在 React 中处理 CORS
- c - 如何将二进制转换为十六进制并将值写入某个地址?
- html - 如何让 CSS 网格跨列到下一行?
- docker - Docker 日志中的 DataDog 记录图像报告错误
- swift - 除了 .tintColor 之外,还有其他方法可以更改 UITextField 的光标颜色吗?
- javascript - 从 ajax 响应中选择 setTimeout 属性
- phaser-framework - Phaser 3 物质物理容器,用于自定义形状的精灵
- kotlin - 为什么常规 for 循环优于 forEach?
- git - 让 git diff 不打印到终端