我在我的应用程序中使用了多个护照策略。
现在,由于我正在使用多种通行证策略进行连接(而不仅仅是登录),因此我决定向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在req上公开了login()函数(也别名为logIn()) 可以用来建立登录会话。
和
登录操作完成后,将用户分配给req.user。
那么与 req.login相比,使用 serializer / deserializer 有什么区别?
同样在回调中,我们总是可以这样做
req.logIn()
获取 passReqToCallback: true
}, (req, accessToken, refreshToken, params, profile, cb) => {
总结一下,有人可以帮助我理解上面的代码片段吗?
答案 0 :(得分:1)
在较高级别,Passport.js是一种中间件,可以在请求/响应头(通常是会话cookie)中“序列化”用户身份。此序列化步骤意味着它将获取标识用户的登录信息并生成一个代表该用户的新对象。将此对象视为只有Passport会知道如何解释的钥匙卡。
当用户发出其他API请求时,他们会传回相同的标识头。 Passport通过“反序列化”请求来验证请求,以识别发出该请求的用户。
req.login()
是为用户生成会话的魔力。该会话代表无需重新进行身份验证即可登录的有效时间。
让我们看一下代码片段的开头:
passport.authenticate('meetup', (err, user, info) => {
...
if (!user) { return...
在此代码段中,将护照设置为中间件。当请求通过时,后台的护照已经通过反序列化cookie来解释请求标头,并确定它是否代表用户。如果没有用户,或者请求标头不代表用户,则该请求未被授权。
答案 1 :(得分:0)