Паспорт не устанавливает req.user при тестировании с Supertest, используя cookieSession - PullRequest
0 голосов
/ 14 мая 2018

У меня проблема с тестированием приложения 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.

Спасибо!

...