req.login在护照上做什么

时间:2019-01-18 20:50:23

标签: node.js express passport.js

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

现在,由于我正在使用多种通行证策略进行连接(而不仅仅是登录),因此我决定向Google提出如何操作的方法。

这是我偶然发现此代码的地方

df.where(~df, df.index)

        0       1       2
10      10      False   False
100     False   False   100
1000    False   1000    False

在这里,我无法理解正在发生的事情,就像第一个问题一样, 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

根据passport docs

  

Passport在req上公开了login()函数(也别名为logIn())   可以用来建立登录会话。

  

登录操作完成后,将用户分配给req.user。

那么与 req.login相比,使用 serializer / deserializer 有什么区别?

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

req.logIn()

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

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

2 个答案:

答案 0 :(得分:1)

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

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

req.login()是为用户生成会话的魔力。该会话代表无需重新进行身份验证即可登录的有效时间。

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

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

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

答案 1 :(得分:0)


req.login别名为req.logIn

  1. 护照在req上公开了login()函数(也别名为logIn()),可用于建立登录名 会议。
  2. 登录操作完成后,将用户分配给req.user
  3. 注意:passport.authenticate()中间件会自动调用req.login()。