Passport.js,具有相同凭据的快速会话跨浏览器

Passport.js, Express session Cross-browser with same credentials

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

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

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

有线索吗?

As we all know that Passport.js store all details into req.users and

不一定。 passport.js 没有 store req.user 中的用户详细信息,但是您的 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 标志或反序列化时的某些缓存