Бэкенд: - PATCH /auth/me — изменение имени и/или email. Смена email проверяет уникальность, сбрасывает is_verified и отправляет новое письмо подтверждения. Пользователь перезагружается из БД (объект из Redis-кэша не привязан к сессии), кэш инвалидируется после изменения. - POST /auth/change-password — смена пароля с подтверждением текущего; отклоняет неверный текущий и совпадение нового со старым. Фронтенд: - Страница /settings: карточка персональных данных (имя, email со статусом подтверждения и предупреждением о повторной верификации) и карточка смены пароля с проверкой совпадения. - Ссылка «Настройки» в карточке профиля кабинета, методы API-клиента. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""Схемы для аутентификации и авторизации."""
|
||
|
||
from pydantic import BaseModel, EmailStr, Field
|
||
|
||
|
||
class RegisterRequest(BaseModel):
|
||
"""Запрос на регистрацию нового пользователя."""
|
||
|
||
email: EmailStr
|
||
password: str = Field(min_length=8, max_length=128)
|
||
name: str = Field(min_length=1, max_length=255)
|
||
|
||
|
||
class LoginRequest(BaseModel):
|
||
"""Запрос на вход в систему."""
|
||
|
||
email: EmailStr
|
||
password: str
|
||
|
||
|
||
class UpdateProfileRequest(BaseModel):
|
||
"""Изменение персональных данных (имя и/или email)."""
|
||
|
||
name: str | None = Field(default=None, min_length=1, max_length=255)
|
||
email: EmailStr | None = None
|
||
|
||
|
||
class ChangePasswordRequest(BaseModel):
|
||
"""Смена пароля: нужен текущий пароль для подтверждения."""
|
||
|
||
current_password: str
|
||
new_password: str = Field(min_length=8, max_length=128)
|
||
|
||
|
||
class UserInToken(BaseModel):
|
||
"""Минимальная информация о пользователе в JWT токене."""
|
||
|
||
id: int
|
||
email: str
|
||
name: str
|
||
plan: str
|
||
is_verified: bool
|
||
is_admin: bool = False
|
||
|
||
model_config = {"from_attributes": True}
|
||
|
||
|
||
class TokenResponse(BaseModel):
|
||
"""Ответ с JWT токеном и данными пользователя."""
|
||
|
||
access_token: str
|
||
token_type: str = "bearer"
|
||
user: UserInToken
|