繁体   English   中英

req.login 在护照上有什么作用

[英]what does req.login do in 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 在 req(也称为 logIn())上公开了一个 login() 函数,可用于建立登录会话。

当登录操作完成时,用户将被分配到 req.user。

那么与req.login相比,使用序列化器/反序列化器有什么区别呢?

同样在回调中,我们总是可以这样做

  passReqToCallback: true
  }, (req, accessToken, refreshToken, params, profile, cb) => { 

获取req

总结一下,有人可以帮我理解上面的代码片段吗?

在高级别 Passport.js 是一个中间件,它在请求/响应头(通常是会话 cookie)中“序列化”用户身份。 这个序列化步骤意味着它获取标识用户的登录信息并生成代表用户的新对象。 将此对象视为只有 Passport 知道如何解释的钥匙🔑卡片。

当用户发出额外的 API 请求时,他们会返回相同的标识标头。 Passport 通过“反序列化”请求来验证请求,以识别发出该请求的用户。

req.login()是为用户生成会话的魔法。 此会话表示无需重新验证登录的有效时间。

让我们看一下代码片段的开头:

 passport.authenticate('meetup', (err, user, info) => {
   ...
   if (!user) { return...

在这个片段中,passport 被设置为中间件。 当请求通过时,后台的通行证已经通过反序列化 cookie 来解释请求标头,并确定它是否代表用户。 如果没有用户或请求头不代表用户,则该请求未被授权。


req.login 别名为 req.logIn

  1. Passport 在 req(也称为 logIn())上公开了一个 login() 函数,可用于建立登录会话。
  2. 当登录操作完成时,用户将被分配到 req.user
  3. 注意:passport.authenticate() 中间件会自动调用 req.login()。

此功能使用低版本护照 v0.4.1

你可以安装这个

npm install passport@^0.4.1

您的req.login函数应该适用于该版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM