feature:基本框架
This commit is contained in:
+27
@@ -0,0 +1,27 @@
|
||||
"""路由级鉴权依赖:Bearer JWT → 校验 token → 按 user_id 回查 sys_user → 注入用户。"""
|
||||
from fastapi import Depends, Request
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from config.deps import get_db
|
||||
from model.sys_user import SysUser
|
||||
from repositories.sys_user import SysUserRepo
|
||||
from service.auth import decode_token
|
||||
from utils.exceptions import AuthError, ForbiddenError
|
||||
|
||||
|
||||
async def get_current_user(
|
||||
request: Request, db: AsyncSession = Depends(get_db)
|
||||
) -> SysUser:
|
||||
header = request.headers.get("Authorization", "")
|
||||
if not header.startswith("Bearer "):
|
||||
raise AuthError()
|
||||
try:
|
||||
user_id = int(decode_token(header.removeprefix("Bearer "))["user_id"])
|
||||
except Exception:
|
||||
raise AuthError("Token 无效或已过期")
|
||||
user = await SysUserRepo(db).get(user_id)
|
||||
if user is None:
|
||||
raise AuthError("用户不存在")
|
||||
if user.status != "正常":
|
||||
raise ForbiddenError("账号已被禁用或冻结")
|
||||
return user
|
||||
Reference in New Issue
Block a user