add user? new page? new web
This commit is contained in:
50
web/info.py
50
web/info.py
@@ -1,7 +1,49 @@
|
||||
import os
|
||||
import httpx
|
||||
import flet as ft
|
||||
|
||||
class user():
|
||||
def __init__(self, page: ft.Page):
|
||||
pass
|
||||
API_URL = os.getenv("API_URL", "http://api:8000")
|
||||
_TOKEN_KEY = "auth_token"
|
||||
|
||||
#page.client_storage.set("token", "your_jwt_token_here")
|
||||
|
||||
class AuthService:
|
||||
"""Сервис авторизации: логин, логаут, проверка токена."""
|
||||
|
||||
def __init__(self, page: ft.Page):
|
||||
self._page = page
|
||||
|
||||
async def login(self, username: str, password: str) -> str | None:
|
||||
"""
|
||||
Отправляет запрос на POST /auth/login.
|
||||
Возвращает None при успехе, строку с ошибкой при неудаче.
|
||||
"""
|
||||
try:
|
||||
async with httpx.AsyncClient(base_url=API_URL, timeout=10) as client:
|
||||
resp = await client.post(
|
||||
"/auth/login",
|
||||
data={"username": username, "password": password},
|
||||
)
|
||||
if resp.status_code == 200:
|
||||
token = resp.json()["access_token"]
|
||||
self._page.session.set(_TOKEN_KEY, token)
|
||||
return None
|
||||
elif resp.status_code == 401:
|
||||
return "Неверный логин или пароль"
|
||||
else:
|
||||
return f"Ошибка сервера: {resp.status_code}"
|
||||
except httpx.ConnectError:
|
||||
return "Не удалось подключиться к серверу"
|
||||
except Exception as e:
|
||||
return f"Ошибка: {e}"
|
||||
|
||||
async def logout(self):
|
||||
"""Удаляет токен — пользователь разлогинен."""
|
||||
self._page.session.remove(_TOKEN_KEY)
|
||||
|
||||
async def get_token(self) -> str | None:
|
||||
"""Возвращает сохранённый токен или None если не авторизован."""
|
||||
return self._page.session.get(_TOKEN_KEY)
|
||||
|
||||
async def is_authenticated(self) -> bool:
|
||||
token = await self.get_token()
|
||||
return token is not None and token != ""
|
||||
|
||||
Reference in New Issue
Block a user