# =========================================== # 班级操行分管理系统 - 后端服务 # # 开发者: Canglan # 联系方式: admin@sea-studio.top # 版权归属: Sea Network Technology Studio # 许可证: MIT License # # 版权所有 © Sea Network Technology Studio # =========================================== from fastapi import APIRouter, Request, HTTPException from typing import Dict, Any from schemas.auth import LoginRequest, ChangePasswordRequest from services.auth_service import AuthService from middleware.permission import get_current_user from utils.response import success_response, error_response, unauthorized_response from utils.logger import get_logger router = APIRouter() logger = get_logger(__name__) @router.post("/login") async def login(request: LoginRequest, http_request: Request): """ 用户登录 """ # 获取客户端IP client_ip = http_request.client.host user_agent = http_request.headers.get("user-agent", "") result = await AuthService.login( username=request.username, password=request.password, ip=client_ip, user_agent=user_agent ) if result["success"]: return success_response( data={ "token": result["token"], "user_id": result["user_id"], "username": result["username"], "real_name": result["real_name"], "user_type": result["user_type"], "student_id": result.get("student_id"), "role": result.get("role"), "need_change_password": result["need_change_password"], "redirect": result["redirect"] }, message="登录成功" ) else: return error_response(message=result["message"], code=401) @router.post("/logout") async def logout(request: Request): """ 用户登出 """ user = await get_current_user(request) result = await AuthService.logout(user["user_id"]) if result["success"]: return success_response(message="登出成功") else: return error_response(message=result["message"]) @router.post("/change-password") async def change_password(request: Request, req: ChangePasswordRequest): """ 修改密码 """ user = await get_current_user(request) result = await AuthService.change_password( user_id=user["user_id"], old_password=req.old_password, new_password=req.new_password ) if result["success"]: return success_response(message="密码修改成功,请重新登录") else: return error_response(message=result["message"]) @router.get("/me") async def get_current_user_info(request: Request): """ 获取当前用户信息 """ user = await get_current_user(request) # 获取用户详细信息 from services.auth_service import AuthService user_info = await AuthService.get_user_info(user["user_id"]) return success_response(data=user_info)