Аутентификация
Эндпоинты аутентификации не требуют JWT-токена (кроме /auth/me и /auth/logout).
POST /auth/register
Регистрация нового пользователя. Создаёт пользователя, опционально — организацию, и возвращает токен.
Тело запроса
json
{
"name": "Иван Петров",
"email": "ivan@example.com",
"password": "securePassword123",
"organization_name": "Моя Компания"
}Успешный ответ (201)
json
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "a1b2c3d4-e5f6-...",
"token_type": "Bearer",
"expires_at": "2026-06-12T13:00:00Z",
"user": {
"id": 1,
"email": "ivan@example.com",
"name": "Иван Петров",
"organization_id": 1
}
}Ошибки
| Код | Причина |
|---|---|
| 400 | Некорректное тело запроса (пустое имя, слабый пароль) |
| 409 | Email уже зарегистрирован |
| 500 | Ошибка сервера |
POST /auth/login
Вход по email и паролю.
Тело запроса
json
{
"email": "ivan@example.com",
"password": "securePassword123"
}Успешный ответ (200)
json
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "a1b2c3d4-e5f6-...",
"token_type": "Bearer",
"expires_at": "2026-06-12T13:00:00Z",
"user": {
"id": 1,
"email": "ivan@example.com",
"name": "Иван Петров",
"organization_id": 1
}
}Ошибки
| Код | Причина |
|---|---|
| 400 | Некорректное тело запроса |
| 401 | Неверный email или пароль |
Безопасность
Неудачные попытки входа логируются в таблицу login_attempts:
sql
INSERT INTO login_attempts (user_id, ip_address, user_agent, success, failure_reason, created_at)
VALUES (1, '192.168.1.100', 'Mozilla/5.0...', false, 'Invalid password', NOW())POST /auth/refresh
Обновление access-токена с помощью refresh-токена.
Тело запроса
json
{
"refresh_token": "a1b2c3d4-e5f6-..."
}Успешный ответ (200)
json
{
"access_token": "новый_access_токен",
"refresh_token": "новый_refresh_токен",
"token_type": "Bearer",
"expires_at": "2026-06-12T14:00:00Z",
"user": {
"id": 1,
"email": "ivan@example.com",
"name": "Иван Петров",
"organization_id": 1
}
}Ошибки
| Код | Причина |
|---|---|
| 401 | Невалидный или истёкший refresh-токен |
POST /auth/logout
Завершение сессии на сервере. Требует JWT-токен.
Заголовки
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...Успешный ответ (200)
json
{
"message": "Logged out successfully"
}На стороне сервера удаляется запись из user_sessions по user_id и session_token.
GET /auth/me
Информация о текущем пользователе. Требует JWT-токен.
Заголовки
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...Успешный ответ (200)
json
{
"id": 1,
"email": "ivan@example.com",
"name": "Иван Петров",
"organization_id": 1
}Ошибки
| Код | Причина |
|---|---|
| 401 | Токен отсутствует или невалиден |
| 404 | Пользователь не найден |
Сводная таблица
| Метод | Путь | Аутентификация | Описание |
|---|---|---|---|
| POST | /auth/register | Нет | Регистрация |
| POST | /auth/login | Нет | Вход |
| POST | /auth/refresh | Нет | Обновление токенов |
| POST | /auth/logout | Bearer | Выход |
| GET | /auth/me | Bearer | Текущий пользователь |