Express 会话与 PassportJS 会话

Posted

技术标签:

【中文标题】Express 会话与 PassportJS 会话【英文标题】:Express session vs. PassportJS session 【发布时间】:2015-01-16 13:37:54 【问题描述】:

Express 应用程序中的 Express 会话和 Passport 会话是否冲突?为什么或为什么不?

下面是一些区分 Express 和 Passport 会话对象的代码:

    app.use(express.session());
    app.use(passport.session());

    app.use(session(
        cookie : 
            maxAge : 60000
        
    ));

【问题讨论】:

【参考方案1】:

不,它们是两个独立的东西,它们不冲突。而且passport.session必须在express.session之后使用才能正常工作。

express.session 中间件用于从数据存储(如 Redis)中检索用户会话。我们可以找到会话对象,因为会话 ID 存储在 cookie 中,该 cookie 随每个请求提供给服务器。

然后,passport.session 中间件的目的是使用passport.deserializeUser 函数(您在护照配置中定义)从会话中反序列化用户对象。当用户首次对自己进行身份验证时,其用户对象被序列化并存储在会话中。在每个后续请求中,中间件都会反序列化用户并填充 req.user 对象。

查看Passpot Configure Guide 和这个 SO 答案:What does passport.session() middleware do? 了解更多信息。

【讨论】:

在不使用 express-session 的情况下 passort-session 可以工作吗?

以上是关于Express 会话与 PassportJS 会话的主要内容,如果未能解决你的问题,请参考以下文章

Passportjs 的会话问题

如何使passportjs google login oauth与JWT一起使用,而不是通过序列化/反序列化方法创建会话?

PassportJS 中的会话如何协同工作

为啥 Node 中的 PassportJS 不会在注销时删除会话

PassportJS 会话混淆了

如何使用来自passportjs的会话