Node.js 护照没有';t在使用Supertest进行测试时,使用cookieSession设置req.user

Node.js 护照没有';t在使用Supertest进行测试时,使用cookieSession设置req.user,node.js,express,passport.js,supertest,Node.js,Express,Passport.js,Supertest,我使用Express中的“cookieSession”使用Supertest测试Express应用程序时遇到问题。 当我使用Express中的session时,一切正常,但是cookieSession无法正确使用PassportJS 我使用PassportJS对用户进行身份验证,并将用户设置为请求对象(req.user)。因此,/login按预期工作,它返回正确的set cookie头,但在下一个请求中,身份验证失败,这不会使用user对象设置req.user属性,即使它正确地反序列化/序列化了

我使用Express中的“cookieSession”使用Supertest测试Express应用程序时遇到问题。 当我使用Express中的
session
时,一切正常,但是
cookieSession
无法正确使用PassportJS

我使用PassportJS对用户进行身份验证,并将用户设置为请求对象(req.user)。因此,
/login
按预期工作,它返回正确的
set cookie
头,但在下一个请求中,身份验证失败,这不会使用user对象设置
req.user
属性,即使它正确地反序列化/序列化了user

环境 版本:

  • 快递:4.16.2
  • PassportJS:0.3.2
  • 超级测试:2.0.1
  • 超级药剂:2.3.0
以下是我初始化superagent的方式:

import * as supertest from 'supertest';
import * as superagent from 'superagent';
import app from '../../app';
const request = supertest.agent(app);
我在测试之前运行登录(使用异步/等待功能):

然后我向后端发出第一个请求以检索数据:

const readResponse: superagent.Response = await             
request.post('/getData').send(requestBody);
这就是它失败的地方。它返回给我状态码401,因为PassportJS不向请求对象提供用户数据。它可能不在req.user中吗

在app.ts中,我将cookieSession和passportJS会话设置为:

app.use(cookieSession({
  keys: [process.env.SESSION_SECRET],
  maxAge: 24 * 60 * 60 * 1000 * 14 // 14 days
}));
app.use(passport.initialize());
app.use(passport.session());
但是:如果我使用普通会话(在数据库中存储数据):

然后一切都像一个魔咒(除了我有一些其他问题,这就是我切换到
cookieSession
的原因)

谢谢

app.use(cookieSession({
  keys: [process.env.SESSION_SECRET],
  maxAge: 24 * 60 * 60 * 1000 * 14 // 14 days
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(session({
  resave: true,
  saveUninitialized: true,
  secret: process.env.SESSION_SECRET,
  cookie : {
    expires: false
  },
  store: new MongoStore({
    url: process.env.MONGODB_URI || process.env.MONGOLAB_URI,
    autoReconnect: true
  })
}));
app.use(passport.initialize());
app.use(passport.session());