【问题标题】:Express Passport.js: req.user VERSUS req.session.passport.userExpress Passport.js:req.user 与 req.session.passport.user
【发布时间】:2015-01-19 06:25:02
【问题描述】:

根据这篇文章

http://toon.io/understanding-passportjs-authentication-flow/

看起来 PassportJS/Express 将登录用户存储在两个地方

req.user

req.session.passport.user

为什么两者兼而有之?我应该使用哪一个?当我使用护照注销时,它会破坏 req.user 和 req.session.passport.user 吗?

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    你应该总是,总是在你自己的代码中使用req.user——这很重要,因为如果你使用req.session.passport.user,你实际上是从会话cookie(它可能已经过时了)。

    最好始终依赖 req.user,而不是直接依赖 cookie 数据,因为根据您的实施,该信息可能已过时。

    回答您的问题:如果您注销用户,req.sessionreq.user 将不再可用。

    【讨论】:

    • req.session.passport.user 实际上不会从会话本身(不是会话 cookie)中提取信息吗?我可能弄错了,但除非您禁用会话,否则req.user 是否真的只是映射到req.session.passport.user?我看不出两者实际上会有什么不同。现在,如果您以某种方式将实际数据存储在 cookie 中(而不只是会话 id),然后通过 req.cookies 访问该数据,那么它肯定可能已过时,但这是完全不同的情况。
    • 否 -- req.session.passport.user 是从会话 cookie 中提取的(没有其他地方)。这就是它与基于 cookie 的会话身份验证的工作方式,除非您使用其他形式。
    • 也许我们在谈论不同的事情,但这在使用 MemoryStore 或基于服务器的会话存储的上下文中没有意义。使用服务器端会话存储时,会话 cookie(发送到浏览器)仅存储会话 ID。所有数据都保留在服务器上。会话的重点是为给定用户在服务器上保持数据可用和最新。会话 cookie 仅允许浏览器保持与特定会话的链接。通过req.session 访问数据将始终包含最新的会话信息。
    • 如果会话使用 cookieSession 存储(整个会话保存在 cookie 中),您所说的可能是真的,但我认为大多数人在使用术语“会话 cookie”。最常见的情况是有一个服务器端会话存储,其 ID 存储在发送到浏览器的 cookie 中。
    • 这是正确的。我在这里推荐其他用法的观点是它不依赖于正在使用的会话存储,因此通常更安全。在某些情况下(您已经指出)情况并非如此。
    猜你喜欢
    • 2018-03-12
    • 2017-01-02
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多