呼叫之间会话数据丢失(节点/快速)

时间:2015-09-27 23:57:41

标签: node.js authentication express passport.js

现在我的问题归结为两台服务器。一个节点服务器只是提供我的静态资产(HTML / JS / CSS)。另一台服务器充当了api - 这是微服务方法的一个基本开端。我正在使用PassportJS来处理身份验证,将Redis用作会话存储。

当我登录时,我可以看到我的会话数据存储在req.session中,但在每个后续请求中,该会话数据都消失了。 PassportJS文档表明,只要我调用passport.initialize,就会在每次请求时创建req.session.user对象(通过调用passport.session将会话数据存储在用户对象中)。但是,req.session.user对象不存在,并且它出现的唯一时间是在我调用req.login之后(到那时它存储了用户的数据)。

这是我在API服务器中的中间件实现:

app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(session(sessionConfig));
app.use(passport.initialize());
app.use(passport.session());

调用req.sessionreq.login包含的示例

{ cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true },
  passport: { user: <some user id> } }

req.session包含任何请求,包括在显式调用req.login之前登录

{ cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true } }

我能做些什么来挽救所有这些PassportJS代码?在将静态资产处理拆分为自己的服务器之前,此设置似乎工作正常。当我使用NGINX(由于我对非脚本工具缺乏安慰而摆脱它)来提供我的静态资产而不是节点服务器时,它似乎工作得很好。

我有一种倾向,我可能不得不滚动自己的身份验证,并在每次向客户提出请求时明确传递sessionid,但我不希望万一我在这里遗漏了一些东西。< / p>

0 个答案:

没有答案