【问题标题】:Passport.js, Express session Cross-browser with same credentialsPassport.js, Express session 具有相同凭据的跨浏览器
【发布时间】:2018-12-04 02:42:47
【问题描述】:

我已使用Passport.js 编写代码用于身份验证。当用户登录chrome 并使用相同的凭据用户登录另一个浏览器“FF”时。

众所周知,Passport.js 将所有详细信息存储到 req.usersreq.session.passport.users。如果从一个浏览器用户更新一些细节,我们如何在不注销的情况下更新到另一个浏览器 req 对象?

同样的,如果管理员更新了 user1 的详细信息并且他已经登录了,那会有什么影响?

有什么线索吗?

【问题讨论】:

    标签: javascript node.js passport.js express-session


    【解决方案1】:

    众所周知,Passport.js 将所有详细信息存储到req.users

    不一定。 passport.jsreq.user 中没有store 用户详细信息,而是您的passport.js 集成代码loads 来自某些后端存储的用户详细信息,然后将其放入每个请求的请求对象中。

    因此,您可以在后端更新用户并决定何时检索每个请求的新版本(而不是仅仅反序列化 jwt,例如)。

    来自http://www.passportjs.org/docs/basic-digest/的示例代码

    passport.use(new BasicStrategy(
      function(username, password, done) {
        User.findOne({ username: username }, function (err, user) {
          if (err) { return done(err); }
          if (!user) { return done(null, false); }
          if (!user.validPassword(password)) { return done(null, false); }
          return done(null, user);
        });
      }
    ));
    

    此代码在每个请求上执行,这意味着在对服务器的每个请求中,您的用户都会从您的数据库中加载。

    即使您在多个浏览器中处理多个会话,结果也是相同的。因此,您可以自行决定何时以及如何更新数据库中的用户。

    否则,如果您不从外部数据源加载用户,但例如从jwt 反序列化整个用户对象(除非您真正了解自己在做什么,否则不建议这样做)然后您需要考虑同步策略,例如检查db 中的一些updated 标志或反序列化时的一些缓存

    【讨论】:

    • 如何分享示例?
    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 2018-03-26
    • 2019-08-02
    • 1970-01-01
    • 2019-09-07
    • 2015-08-26
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多