У меня проблема с тестированием приложения Express с помощью Supertest с использованием cookieSession от Express.Все работает нормально, когда я использую session
из Express, но cookieSession
просто не работает с PassportJS должным образом.
Я использую PassportJS для аутентификации пользователя и установки пользователя для запроса объекта (req.пользователь).Таким образом, /login
работает должным образом, возвращает правильный заголовок set-cookie
, но при следующем запросе проверка подлинности завершается неудачно, что не устанавливает свойство req.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);
Я запускаю логин перед тестами (используя async /особенность await):
await request.post('/login').send({
email: 'some@email.com',
password: 'plainpassword'
});
Затем я делаю первый запрос к бэкэнду для получения данных:
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());
НО: если я использую обычный сеанс (которыйхранение данных в базе данных):
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());
тогда все работает как чудо (за исключением того, что у меня есть некоторые другие проблемы, из-за которых я перешел на cookieSession
.
Спасибо!