FastAPI端点安全:路由认证依赖未生效导致未授权访问如何修复
问题根源
你配置的路由保护依赖指向了负责登录跳转的路由函数login,该函数没有校验当前用户登录状态的逻辑,因此无法实现未认证拦截。另外注意get_api.py中get_higs函数定义末尾缺少冒号,属于语法错误,需要补充修正。
解决步骤
- 新增专门的登录态校验依赖函数,在
main.py中添加如下代码:
from fastapi import status, HTTPException from fastapi.responses import RedirectResponse async def validate_login(request: Request): user = request.session.get('user') if not user: # 场景1:纯接口服务,直接返回401未认证 # raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="未认证用户,请先登录") # 场景2:需要跳转到登录页,使用如下代码 return RedirectResponse(url=request.url_for('login'))
- 修改
PROTECTED依赖配置,替换为上述校验函数:
PROTECTED = [Depends(validate_login)]
修改完成后,get_api下的所有接口都会自动触发登录态校验,未登录用户无法访问接口。
可选优化(规范路由配置)
你当前get_api.py中所有接口路径都手动加了/api前缀,可以在注册路由时统一配置前缀,避免重复编写:
- 首先修改
get_api.py中的接口路径,去掉/api前缀:
@router.get("/higs", tags=["higs"]) def get_higs(db: Session = Depends(get_db)): # 原有逻辑不变
- 然后修改
main.py中注册路由的代码,添加prefix参数:
app.include_router(get_api.router, prefix="/api", dependencies=PROTECTED)
内容的提问来源于stack exchange,提问作者Deb
相关产品推荐
相关产品推荐

