【问题标题】:Passport session - I want store user information in session, but only id in browserPassport session - 我想在 session 中存储用户信息,但在浏览器中只存储 id
【发布时间】:2021-04-02 00:53:38
【问题描述】:

在护照的文档中,我可以阅读以进行序列化和反序列化:

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

因为他们说:“在典型的 Web 应用程序中,用于验证用户的凭据只会在登录请求期间传输。如果验证成功,将通过设置在用户的浏览器。”

但我需要在会话中提供更多信息,例如用户的管理员标志,所以我写了代码:

passport.serializeUser(function(user, done) {
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    findUser(user.username).then((result)=>{
        done(null,result)
    })
}); 

现在当我执行 console.info(req.session) - 之后我得到了我想要的:

  passport: {
    user: {
      _id: '60658af35cecea3308639385',
      username: 'Test1',
      password: '$2b$10$ScrsMi51eUFi4.Iv49aTC.BD/OIuGgtRN9l4R9OGUj3hZEecI9MIC',
      admin: 0
    }
  }

但我现在有一个问题: 因此,如果我不是按文档中的 id 而是按整个用户执行此操作,那么条目用户现在是否是 id 并且所有这些信息都在我用户的 cookie 浏览器中?如何在会话中小心地存储例如管理员标志 - 有关此用户的更多信息,但仅在会话中不在他的浏览器中。

【问题讨论】:

    标签: node.js passport.js


    【解决方案1】:

    您可以使用快速会话,它可以存储数据并尽可能地隐藏秘密。这是一个使用它的例子。 Express-Session

       app.use(session({
      secret: 'keyboard cat',
      resave: false,
      saveUninitialized: true,
      cookie: { secure: true }
    }))
    

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 2019-10-15
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      相关资源
      最近更新 更多