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

ann*_*123 5 node.js express passport.js

我在我的应用程序中使用了多个护照策略。

现在,由于我使用多通行证策略进行连接(而不仅仅是登录),因此我决定在 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);
          });
Run Code Online (Sandbox Code Playgroud)

在这里我无法理解正在发生的事情,比如第一个问题,什么是if (!user),这意味着什么 req.user

其次,有 req.logIn()

根据护照文件

Passport 在 req(也称为 logIn())上公开了一个 login() 函数,可用于建立登录会话。

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

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

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

  passReqToCallback: true
  }, (req, accessToken, refreshToken, params, profile, cb) => { 
Run Code Online (Sandbox Code Playgroud)

要得到 req

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

Ada*_*uld 5

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

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

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

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

 passport.authenticate('meetup', (err, user, info) => {
   ...
   if (!user) { return...
Run Code Online (Sandbox Code Playgroud)

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