added some govno to postgres
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# JWT Аутентификация — AegisGuard API
|
||||
|
||||
## Схема работы
|
||||
|
||||
- **access_token** — JWT, живёт 24 часа. Передаётся в заголовке `Authorization: Bearer`.
|
||||
- **refresh_token** — случайная строка, хранится в БД в виде хеша. Используется **один раз** (ротация): при запросе новой пары старый токен удаляется.
|
||||
- Регистрация сразу возвращает токены — отдельный логин не нужен.
|
||||
|
||||
## Эндпоинты
|
||||
|
||||
### POST /api/auth/register
|
||||
|
||||
Создание аккаунта.
|
||||
|
||||
```
|
||||
Запрос:
|
||||
{ "username": "john", "email": "john@example.com", "password": "Secret123" }
|
||||
|
||||
Ответ 201:
|
||||
{
|
||||
"token": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4=",
|
||||
"user": {
|
||||
"id": "uuid",
|
||||
"username": "john",
|
||||
"email": "john@example.com",
|
||||
"created_at": "2026-06-13T12:00:00Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `username` — 3–30 символов
|
||||
- `email` — валидный email
|
||||
- `password` — минимум 8 символов, обязательно заглавная + строчная + цифра
|
||||
|
||||
Ошибки: `400` (валидация), `409` (email уже занят).
|
||||
|
||||
### POST /api/auth/login
|
||||
|
||||
```
|
||||
Запрос:
|
||||
{ "email": "john@example.com", "password": "Secret123" }
|
||||
|
||||
Ответ 200:
|
||||
{ "token": "...", "refresh_token": "...", "user": { ... } }
|
||||
```
|
||||
|
||||
Rate limit: 10 попыток в минуту с одного IP (`429 Too Many Requests`).
|
||||
|
||||
### POST /api/auth/refresh
|
||||
|
||||
Обновить токены по refresh_token. Старый удаляется, выдаётся новая пара.
|
||||
|
||||
```
|
||||
Запрос:
|
||||
{ "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4=" }
|
||||
|
||||
Ответ 200:
|
||||
{ "token": "...", "refresh_token": "...", "user": { ... } }
|
||||
```
|
||||
|
||||
### POST /api/auth/logout
|
||||
|
||||
Удалить refresh_token из БД.
|
||||
|
||||
```
|
||||
Запрос:
|
||||
{ "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4=" }
|
||||
|
||||
Ответ 200:
|
||||
{ "message": "logged out successfully" }
|
||||
```
|
||||
|
||||
## Заголовок авторизации
|
||||
|
||||
```
|
||||
Authorization: Bearer <access_token>
|
||||
```
|
||||
|
||||
## Формат JWT
|
||||
|
||||
```json
|
||||
{
|
||||
"user_id": "uuid",
|
||||
"email": "john@example.com",
|
||||
"sub": "uuid",
|
||||
"exp": 1718000000,
|
||||
"iat": 1717913600
|
||||
}
|
||||
```
|
||||
|
||||
- `user_id` — UUID пользователя
|
||||
- `email` — Email пользователя
|
||||
- `sub` — то же, что `user_id`
|
||||
- `exp` — Unix-timestamp истечения токена
|
||||
- `iat` — Unix-timestamp выпуска токена
|
||||
|
||||
## Формат ошибок
|
||||
|
||||
```json
|
||||
{ "error": "описание" }
|
||||
```
|
||||
|
||||
- `400` — ошибка валидации
|
||||
- `401` — неверный email/пароль, токен протух или невалиден
|
||||
- `409` — email уже зарегистрирован
|
||||
- `429` — превышен лимит попыток логина
|
||||
- `500` — внутренняя ошибка сервера
|
||||
Reference in New Issue
Block a user