我在我的应用程序中使用了多个 Passport 策略。
现在,由于我使用多通行证策略进行连接(而不仅仅是登录),因此我决定在 Google 上搜索有关如何操作的信息。
这是我偶然发现这段代码的地方
passport.authenticate('meetup', (err, user, info) => {
if (err) { return next(err); }
if (!user) { return res.redirect(process.env.CLIENT_ADDRESS); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect(process.env.CLIENT_ADDRESS);
});
在这里我无法理解发生了什么,比如第一个问题,什么是
if (!user)
, 是不是意味着req.user
二、还有
req.logIn()
根据 passport docs ,
Passport exposes a login() function on req (also aliased as logIn()) that can be used to establish a login session.
和
When the login operation completes, user will be assigned to req.user.
那么使用有什么区别?串行器/解串器 与 相比要求登录?
同样在回调中,我们总是可以这样做
passReqToCallback: true
}, (req, accessToken, refreshToken, params, profile, cb) => {
获取
req
总结一下,有人可以帮我理解上面的代码片段吗?
最佳答案
在高级别 Passport.js 是一个中间件,它在请求/响应头(通常是 session cookie)中“序列化”用户身份。这个序列化步骤意味着它获取标识用户的登录信息并生成代表用户的新对象。将此对象视为只有 Passport 知道如何解释的 key 🔑卡片。
当用户发出额外的 API 请求时,他们会返回相同的标识 header 。 Passport 通过“反序列化”请求来验证请求,以识别发出该请求的用户。req.login()
是为用户生成 session 的魔法。此 session 表示无需重新验证登录的有效时间。
让我们看一下代码片段的开头:
passport.authenticate('meetup', (err, user, info) => {
...
if (!user) { return...
在这个片段中,passport 被设置为中间件。当请求通过时,后台的通行证已经通过反序列化 cookie 来解释请求 header ,并确定它是否代表用户。如果没有用户或请求头不代表用户,则该请求未被授权。
关于node.js - req.login 在 Passport 上有什么作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261263/