Node.js 护照没有';t在使用Supertest进行测试时,使用cookieSession设置req.user
我使用Express中的“cookieSession”使用Supertest测试Express应用程序时遇到问题。 当我使用Express中的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属性,即使它正确地反序列化/序列化了
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
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());