From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目
---
backend/app/routers/auth_router.py | 42 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/backend/app/routers/auth_router.py b/backend/app/routers/auth_router.py
new file mode 100644
index 0000000..c5f18c9
--- /dev/null
+++ b/backend/app/routers/auth_router.py
@@ -0,0 +1,42 @@
+from fastapi import APIRouter, Depends, HTTPException
+from sqlalchemy.orm import Session
+
+from app.auth import create_access_token, get_current_user, hash_password, verify_password
+from app.database import get_db
+from app.login_guard import clear_login_lock, ensure_login_allowed, record_login_failure
+from app.models import User
+from app.schemas import ChangePasswordRequest, LoginRequest, TokenResponse, UserMe
+
+router = APIRouter(prefix="/api/auth", tags=["auth"])
+
+
+@router.post("/login", response_model=TokenResponse)
+def login(body: LoginRequest, db: Session = Depends(get_db)):
+ ensure_login_allowed(db, body.username)
+ user = db.query(User).filter(User.username == body.username).first()
+ if not user or not user.is_active or not verify_password(body.password, user.password_hash):
+ record_login_failure(db, body.username)
+ raise HTTPException(401, detail="鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒")
+ clear_login_lock(db, body.username)
+ token = create_access_token(user.id, user.role)
+ return TokenResponse(access_token=token)
+
+
+@router.get("/me", response_model=UserMe)
+def me(user: User = Depends(get_current_user)):
+ return user
+
+
+@router.post("/change-password")
+def change_password(
+ body: ChangePasswordRequest,
+ db: Session = Depends(get_db),
+ user: User = Depends(get_current_user),
+):
+ if body.old_password == body.new_password:
+ raise HTTPException(400, detail="鏂板瘑鐮佷笉鑳戒笌鏃у瘑鐮佺浉鍚�")
+ if not verify_password(body.old_password, user.password_hash):
+ raise HTTPException(400, detail="鍘熷瘑鐮佷笉姝g‘")
+ user.password_hash = hash_password(body.new_password)
+ db.commit()
+ return {"ok": True}
--
Gitblit v1.8.0