auth-jwt
JWT аутентификация: токены, роли, авто-refresh, middleware
Source: magicreek + IFCG
Files: 4
Stack:
Next.jsReactAxios
Specification
auth-jwt
Назначение
JWT-аутентификация с поддержкой access/refresh токенов, ролевого доступа и авто-обновления.
Контракты
API Endpoints
| Метод | URL | Тело | Ответ |
|---|
|-------|-----|------|-------|
| POST | /auth/login | `{ email, password }` | `{ access, refresh, user }` |
|---|---|---|---|
| POST | /auth/refresh | `{ refresh }` | `{ access, refresh? }` |
| GET | /auth/me | — (Bearer token) | `{ id, email, name, role }` |
Серверная сторона (бэкенд)
// Хеширование пароля
hashPassword(password: string): Promise<string>
verifyPassword(password: string, hash: string): Promise<boolean>
// Токены
createToken(userId: string): string // JWT, expiresIn: "7d"
verifyToken(token: string): { userId: string } | null
// Middleware
getAuthUser(request: Request): Promise<User | null> // Из Bearer header
verifyInternalApiKey(request: Request): boolean // Из x-api-key header
// Авторизация
verifyProjectMembership(userId: string, projectId: string): Promise<boolean>Клиентская сторона (фронтенд)
// Token storage (localStorage)
auth.getAccess(): string | null
auth.getRefresh(): string | null
auth.setTokens(access: string, refresh: string): void
auth.clear(): void
auth.isLoggedIn(): boolean
// Axios interceptors
// Request: добавляет Authorization: Bearer <access>
// Response 401: пробует refresh → retry, при неудаче → redirect /loginМодель данных
model User {
id String @id @default(uuid())
email String @unique
password String
name String
role UserRole @default(viewer)
}
enum UserRole {
admin
developer
viewer
}Конфигурация
| Переменная | Описание | Обязательно |
|---|
|-----------|----------|-------------|
| JWT_SECRET | Секрет для подписи JWT | Да (prod) |
|---|
Зависимости
•Серверная: bcryptjs, jsonwebtoken, ORM (Prisma)
•Клиентская: axios
•БД: PostgreSQL (или любая, поддерживаемая ORM)
Реализации
| Стек | Путь | Источник | Статус |
|---|
|------|------|----------|--------|
| Next.js (серверная) | implementations/nextjs/ | magicreek | проверен |
|---|
Адаптация
•**JWT_SECRET** — задать свой секрет в env.
•**Token expiry** — изменить "7d" в createToken() при необходимости.
•**Роли** — расширить enum UserRole под свой проект.
•**localStorage keys** — заменить "ifcg_access"/"ifcg_refresh" на свои (клиентская сторона).
•**Login redirect** — изменить `/login` path при необходимости.
•**Модель User** — расширить поля (аватар, телефон и т.д.).