- Клиент (браузер)
Фронтенд кликает на кнопку
<button
onClick={() => {
window.location.href = 'https://нашБекенд/auth/yandex/login';
}}
>
Войти через Яндекс
</button>И тем самым отправляет запрос GET /auth/yandex.
-
NestJS Controller
Запрос перехватываетсяAuthGuard('yandex'). -
Passport (yandex strategy)
Пользователь перенаправляется на страницу OAuth Яндекса. -
Yandex OAuth
Пользователь логинится и подтверждает доступ. -
Yandex OAuth → callback
Яндекс делает редирект обратно на
GET /auth/yandex/callback?code=.... -
AuthGuard('yandex')
Guard снова перехватывает запрос callback. -
passport-yandex
- обменивает
codeнаaccessToken - запрашивает профиль пользователя
- обменивает
-
YandexStrategy.validate()
Профиль приводится кOAuthUserDto
(provider,providerId,email,name). -
req.user
Вreq.userсохраняетсяOAuthUserDto. -
AuthController callback
Вызывается запрос к сервису и бд:- если пользователь найден, то возвращаем его
- если не найден - то создаем
Далее генерируем токены и редиректим пользователя обратно на фронтенд