@startuml seq-auth title Аутентификация: проверка сессии, вход, выход autonumber actor "Пользователь" as user participant "LoginForm /\nguard.ts" as ui participant "authApi" as authapi participant "client.ts\nrequest()" as client participant "Backend\n(Django)" as be == Проверка сессии при открытии защищённой страницы == ui -> authapi : requireAuthenticated() authapi -> client : session() client -> be : GET /api/session/ be --> client : { isAuthenticated } client --> authapi : SessionInfo alt не аутентифицирован authapi --> ui : goto('/login') end == Вход == user -> ui : ввод логина и пароля ui -> authapi : login(username, password) authapi -> client : post('/login/', {username, password}) client -> be : POST /api/login/ be --> client : 200 { detail } | 400/401 ApiError client --> authapi : результат authapi -> client : whoami() client -> be : GET /api/whoami/ be --> client : { username } client --> ui : WhoAmI ui --> user : переход на рабочую страницу == Выход == user -> ui : «Выйти» ui -> authapi : logout() authapi -> client : post('/logout/', {}) client -> be : POST /api/logout/ be --> client : 204 client --> ui : сброс состояния, goto('/login') @enduml