hoàn thành phần Authentication

This commit is contained in:
2026-03-31 14:15:32 +07:00
commit ebfa869a26
12 changed files with 389 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
from datetime import datetime
from pydantic import BaseModel, EmailStr, field_validator
import re
# ── Auth ─────────────────────────────────────────────────────────────────────
class UserRegister(BaseModel):
username: str
email: EmailStr
password: str
@field_validator("username")
@classmethod
def username_valid(cls, v: str) -> str:
v = v.strip()
if not re.match(r"^[A-Za-z0-9_]{3,64}$", v):
raise ValueError(
"Username must be 364 characters, letters/numbers/underscore only."
)
return v
@field_validator("password")
@classmethod
def password_strength(cls, v: str) -> str:
if len(v) < 8:
raise ValueError("Password must be at least 8 characters.")
return v
class UserLogin(BaseModel):
username: str
password: str
class UserOut(BaseModel):
id: int
username: str
email: str
created_at: datetime
model_config = {"from_attributes": True}
class TokenPayload(BaseModel):
sub: int # user id
exp: int