You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中OAuth2PasswordBearer JWT授权在Swagger UI无法正常工作且tokenUrl显示异常

FastAPI中OAuth2PasswordBearer JWT授权在Swagger UI无法正常工作且tokenUrl显示异常

我来帮你分析并解决这个问题。你遇到的核心问题是Swagger UI的「Authorize」按钮点击后返回404错误,且显示的tokenUrl为/login,但实际登录接口路径是/auth/login,下面是具体的排查和解决方案:


一、核心原因拆解

你当前的代码里只有注册和登录两个公开路由,没有任何需要认证保护的接口。FastAPI的机制是:只有当检测到有路由依赖OAuth2PasswordBearer实例时,才会把正确的OAuth2配置(包括你设置的tokenUrl='/auth/login')写入OpenAPI文档。如果没有这类受保护的路由,Swagger UI会默认使用OAuth2的默认配置,其中tokenUrl被设为/login,导致点击授权时请求了不存在的路径,返回404错误。

另外,我注意到你auth/auth.py里有一个明显的笔误,这个错误会直接导致生成JWT令牌失败:

ACCESS_TOKEN_EXPIRE_MINUTES = 30б  # 这里的「б」是无效的非数字字符

必须立即修正为:

ACCESS_TOKEN_EXPIRE_MINUTES = 30

二、分步解决方法

1. 先修正拼写错误

打开auth/auth.py,把ACCESS_TOKEN_EXPIRE_MINUTES的值改成整数30,避免生成令牌时抛出类型错误。

2. 添加一个受认证保护的测试路由

在routes/auth.py中新增一个依赖get_current_user的路由,这样FastAPI会自动把正确的OAuth2配置写入OpenAPI文档:

# 在 routes/auth.py 顶部导入需要的依赖和模型
from app.auth.auth import get_current_user
from app.schemas.user import UserOut
from app.models.user import User

# 添加受保护的用户信息查询路由
@router.get("/me", response_model=UserOut)
def get_my_profile(current_user: User = Depends(get_current_user)):
    return current_user

3. 强制刷新Swagger UI页面

浏览器大概率缓存了旧的OpenAPI文档,按下Ctrl + F5强制刷新http://localhost:8000/docs页面,此时你会看到Swagger UI中「Authorize」按钮对应的tokenUrl已经变成/auth/login。

4. 验证授权功能

现在点击「Authorize」按钮,输入你注册时的邮箱(作为用户名)和密码,点击「Authorize」就能成功获取令牌并完成授权。之后可以测试/auth/me路由,确认能正确返回当前用户的信息。


三、额外检查项

  1. 确认路由挂载正确
    在你的main.py中,要确保正确导入并挂载了认证路由:
from fastapi import FastAPI
from app.routes.auth import router as auth_router

app = FastAPI(title="用户认证服务")
app.include_router(auth_router)  # 自动带上/auth前缀

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
  1. 升级FastAPI到最新版本
    旧版本的FastAPI可能存在OpenAPI文档生成的bug,执行以下命令升级依赖:
pip install --upgrade fastapi uvicorn python-multipart
  1. 检查OpenAPI文档内容
    访问http://localhost:8000/openapi.json,搜索tokenUrl字段,如果它的值是/auth/login,说明配置已经生效;如果还是/login,则需要检查是否存在多个OAuth2PasswordBearer实例或配置冲突。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:44:50