【问题标题】:Node Passport session lost on subsequent callsNode Passport 会话在后续调用中丢失
【发布时间】:2013-10-21 12:30:18
【问题描述】:

我相信我已经正确配置了一切:

app.configure(function() {
    app.use(express.cookieParser('secret message')); // secret it set here in new version of express or connect
    app.use(express.bodyParser());
    app.use(express.session());
    app.use(passport.initialize());
    app.use(passport.session());
});

当请求使用正确的凭据“登录”时:

app.post('/api/login', passport.authenticate('local'), function (req, res, next) {
    console.log(req.session.passport);  // {"user":"5259f2739d4323000a000003"}
});

req.session.passport 已填充:

"passport": {"user":"5259f2739d4323000a000003"}

但是,当调用:

app.post('/api/checklogin', function (req, res, next) {
    console.log(req.session.passport);  // {}
})

req.session.passport 丢失:

"passport":{}

两次,req.session 看起来像这样:

{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}}

** Passport 对象显然不同,如上所述

我假设我已经正确配置了serializeUser,因为它正确地设置了这个属性。

我不完全确定 Passport 如何创建会话 cookie,以及这些 cookie 如何持续存在。

我假设 req.session.passport 应该保留用户属性,但似乎 Passport 对象:

  1. 每次通话都会重置
  2. 实际上并未在会话中保存 Passport 属性
  3. 从未创建会话

我担心我可能会忽略一些重要的事情——可能是我可能需要做的事情,而 Passport 不能直接为我处理。

我不知道有什么方法可以测试会话是否由 Passport 创建。

非常感谢任何建议或帮助。这是一场多日的斗争。

【问题讨论】:

  • 你能出示你的deserializeUser吗?

标签: node.js passport.js


【解决方案1】:

您是否使用集群设置?如果是这样,您需要停止使用默认的MemoryStore,并切换到connect-redis 之类的东西,以便您应用的不同实例可以访问共享会话数据。

【讨论】:

  • 我没有使用集群设置,是吗?为什么默认的 MemoryStore 不起作用。我不相信我正在创建多个实例
  • 感谢您帮助贾里德
  • 您能解释一下实际问题是什么吗?我遇到了完全相同的问题,但是切换到 Redis 商店并不能解决问题。 deserializeUser 函数仍然不会在顺序调用中被调用,会话的 passport 属性也不会从之前的序列化值中恢复。
猜你喜欢
  • 1970-01-01
  • 2014-04-18
  • 2016-01-21
  • 1970-01-01
  • 2012-04-17
  • 2018-11-12
  • 1970-01-01
  • 2019-09-26
  • 2014-03-21
相关资源
最近更新 更多