feat: normalize email login and improve theme handling
Normalize email input by stripping whitespace and converting to lowercase in login endpoint, remove EmailStr validation in favor of plain string type, move dark mode class toggle from Layout to App component for better initialization, add theme toggle button to login page, and set dark mode as default theme when no preference is stored
This commit is contained in:
@@ -16,7 +16,8 @@ router = APIRouter(prefix="/auth", tags=["auth"])
|
||||
|
||||
@router.post("/login", response_model=TokenPair)
|
||||
def login(payload: LoginRequest, db: Session = Depends(get_db)) -> TokenPair:
|
||||
user = db.scalar(select(User).where(User.email == payload.email))
|
||||
email = payload.email.strip().lower()
|
||||
user = db.scalar(select(User).where(User.email == email))
|
||||
if not user or not verify_password(payload.password, user.password_hash):
|
||||
if user:
|
||||
user.failed_login_attempts += 1
|
||||
@@ -41,4 +42,3 @@ def me(user: CurrentUser) -> User:
|
||||
def logout(user: CurrentUser, db: Session = Depends(get_db)) -> dict[str, str]:
|
||||
write_audit(db, action="logout", object_type="user", object_id=user.id, user_id=user.id)
|
||||
return {"status": "ok", "at": datetime.utcnow().isoformat()}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, EmailStr, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
class OrmModel(BaseModel):
|
||||
@@ -15,13 +15,13 @@ class TokenPair(BaseModel):
|
||||
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
email: EmailStr
|
||||
email: str
|
||||
password: str
|
||||
|
||||
|
||||
class UserRead(OrmModel):
|
||||
id: str
|
||||
email: EmailStr
|
||||
email: str
|
||||
display_name: str
|
||||
is_active: bool
|
||||
|
||||
|
||||
Reference in New Issue
Block a user