Потоки аутентификации
Email + Password
POST /auth/sign_up → User + Profile создаются
→ JWT access_token (15 мин) + refresh_token (30 дней)
POST /auth/sign_in → bcrypt проверка пароля
→ JWT access_token + refresh_token
POST /auth/refresh → refresh_token → новая пара токенов
Google OAuth (реализован)
Мобильное приложение
│
├─ 1. Google Sign-In SDK → id_token
│
└─ 2. POST /api/v1/auth/oauth/google { id_token }
│
├─ Запрос к Google tokeninfo для верификации
├─ Извлечение: sub, email, given_name, family_name
│
├─ Поиск OAuthIdentity (provider=google, uid=sub)
│ ├─ Найдена → sign in
│ └─ Не найдена:
│ ├─ User с таким email есть → привязать
│ └─ Нет → создать User + Profile
│
└─ Выдать JWT access_token + refresh_token
201 Created — новый пользователь
200 OK — существующий
Структура JWT
Payload access token:
{
"user_id": "uuid",
"type": "access",
"exp": 1234567890
}
Payload refresh token:
{
"user_id": "uuid",
"type": "refresh",
"exp": 1234567890
}
Алгоритм: HS256, ключ из SECRET_KEY_BASE.
Планируется
| Метод | Статус |
|---|---|
| Phone + OTP | Планируется |
| Apple Sign-In | Планируется |
| Facebook Login | Планируется |
| Password Reset | Планируется |
| Email Verification | Планируется |
Ошибки токенов
| Ситуация | HTTP | Сообщение |
|---|---|---|
| Токен истёк | 401 | Token expired |
| Токен невалиден | 401 | Invalid token |
| Заголовок отсутствует | 401 | Invalid token |