现在我的问题归结为两台服务器。一个节点服务器只是提供我的静态资产(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.session
后req.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>