Express passport反序列化用户方法从未调用

Express passport反序列化用户方法从未调用,express,passport.js,Express,Passport.js,对于登录请求,我得到了200个响应,但对于任何进一步的身份验证请求,我得到了401个响应,因为反序列化用户从未调用过。我深入到passport源代码,注意到passport会检查req.\u passport.session.user是否存在,如果不存在,则不会调用反序列化用户 我已经搜索了stackoverflow的其他问题,似乎我有具体的案例 有单一的本地策略身份验证类型,我使用Ajax请求进行登录请求,配置CORS设置,-前端,后端) 我使用bodyParse、cookieParser、e

对于登录请求,我得到了200个响应,但对于任何进一步的身份验证请求,我得到了401个响应,因为反序列化用户从未调用过。我深入到passport源代码,注意到passport会检查req.\u passport.session.user是否存在,如果不存在,则不会调用反序列化用户

我已经搜索了stackoverflow的其他问题,似乎我有具体的案例

有单一的本地策略身份验证类型,我使用Ajax请求进行登录请求,配置CORS设置,-前端,后端)

我使用bodyParse、cookieParser、express会话、passport初始化和passport会话。快速会话安全:通过http运行身份验证请求时配置为false

您可以在这里找到我的项目(backend package.json很好,所以您可以使用它,它没有缺少的依赖项,至于frontend,我不确定),至少您可以在那里检查代码

后端 前端

这里有快速会话配置和CORS

Passport配置在这里


你试过maxAge吗

app.use(express.session({   store: sessionStore,
                            cookie: { maxAge : 3600000 } //1 Hour
                            }));

如果查看调用堆栈,发现由于未设置
req.\u passport.session.user
,因此未调用
反序列化用户
,则问题如下。有问题的行位于
快速会话
模块中:

if (!req.sessionID) {
  debug('no SID sent, generating session');
  generate();
  next();
  return;
}
如果设置了sessionID,则永远不会调用
generate

store.generate = function(req){
 req.sessionID = generateId(req); 
 req.session = new Session(req); // THIS
 req.session.cookie = new Cookie(cookieOptions);

 if (cookieOptions.secure === 'auto') {
  req.session.cookie.secure = issecure(req, trustProxy);
 }
};
但是可以设置
req.sessionID
req.session
为空,这解释了
req.\u passport.session.user
为空-
req.session
从未设置

我继续追溯到设置
req.sessionID
的时间,它与新cookie一起,有时被设置,有时不被设置


为什么??我不知道,希望有人进一步调查,但基本上,课程是尝试使用
cookie会话
模块。

我也遇到了同样的问题,你解决了吗?没有,我有解决方案时会在这里回答。暂停了一下。到目前为止,我已经做了所有我能做的,它不起作用)我假设登录请求正在设置cookie,然后在后续请求中传回cookie,并且cookie具有您发出的访问令牌。这是正确的。但express会话或passport会话永远不会恢复,这就是它不调用反序列化方法的原因。我不知道为什么。我看到cookie设置正确,并在auth check请求中将其传递到后端。@Rantiev,您可能想让自己的生活更轻松,并使用
cookie会话
中间件,而不是
express会话
中间件,它将减少设置、时间和头痛。是的,我这样做了。我实际上忘记了问题的状态。不管我是否解决了这个问题,在过去的一年里,我似乎已经更新了所有的模块,并且一切正常。
if (!req.sessionID) {
  debug('no SID sent, generating session');
  generate();
  next();
  return;
}
store.generate = function(req){
 req.sessionID = generateId(req); 
 req.session = new Session(req); // THIS
 req.session.cookie = new Cookie(cookieOptions);

 if (cookieOptions.secure === 'auto') {
  req.session.cookie.secure = issecure(req, trustProxy);
 }
};