Я использую стратегию 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
, и все это должно работать.