Как издеваться над паспортной аутентификацией с Mocha & Chai? - PullRequest
0 голосов
/ 12 января 2020

Я использую стратегию Discord для аутентификации моего приложения React с Express и Passport.

Я пытаюсь написать модульные тесты, но продолжаю получать 403, когда выполняю запрос Chai, так как почти все мои конечные точки проверяют, что req.user определен.

Я искал во всем мире правильный способ смоделировать стратегию passport.authenticate и установить объект user, но безрезультатно:.

Вот конфигурация паспорта:

passport.use(new Strategy({
  clientID: CLIENT_ID,
  clientSecret: CLIENT_SECRET,
  callbackURL: callbackUrl,
  scope: scopes
}, async (accessToken, refreshToken, profile, done) => {
  let user = await getUser(profile.id);
  if (!user) {
    await createUser(profile);
    user = await getUser(profile.id);
  }
  done(null, user);
}));

В партнерстве с конечной точкой /login:

router.get('/login', storeLoginRedirectUrl, passport.authenticate('discord'));

и перенаправлением:

router.get('/redirect',
  passport.authenticate('discord', {
    failureRedirect: `${frontendBaseUrl}/login`,
  }), (req, res) => {
    if (!req.user.leagueUsername) {
      res.redirect(`${frontendBaseUrl}/verify`);
    } else {
      const loginCallbackPath = req.session.loginCallbackPath || '/profile';
      const redirectUrl = `${frontendBaseUrl}${loginCallbackPath}`;
      res.redirect(redirectUrl);
    }
  });

Подпись конечной точки `имя-лиги:

router.post('/league-username', leagueUsernameAuthCheck, async (req, res) => {}

Функция проверки подлинности:

export const leagueUsernameAuthCheck = (req, res, next) => {
  console.log(req.user);
  if (!req.user) {
    formatFrontendRedirect(res, '/login', { message: 'You are not logged in', type: 'warning' });
  } else if (req.user.leagueUsername) {
    formatFrontendRedirect(res, '/profile', { message: 'Your profile is already connected to an account', type: 'info' });
  } else {
    next();
  }
};

И, наконец, модульный тест:

    chai.request(app)
      .post('/auth/verify/league-username')
      .send({ leagueUsername: 'testName' })
      .end((err, res) => {
        res.status.should.be.equal(200);
        done();
      });

Любая помощь очень ценится !!!

Мне просто нужно как-то издеваться passport.authenticate, чтобы сохранить пользователя в req.user, и все это должно работать.

...