后续调用时节点Passport会话丢失

时间:2013-10-14 00:14:46

标签: node.js passport.js

我相信我已经正确配置了所有内容:

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. 永远不会创建会话
  4. 我担心我可能会忽视一些大事 - 可能是我可能需要做的事情,Passport不能直接为我处理。

    我不知道测试会话是否由Passport创建的任何方法。

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

1 个答案:

答案 0 :(得分:5)

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