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

如何用FastAPI测试客户端实现JWT认证?解决未授权报错

解决方案

有两种可行的方式解决这个认证问题,根据你的测试需求选择:

方式一:携带有效JWT令牌发起请求

适合需要完整验证「认证+接口业务逻辑」的测试场景,步骤如下:

  1. 在测试中先创建一个测试用的管理员账号,存入测试数据库
  2. 生成该管理员对应的JWT令牌
  3. 在请求中添加Authorization请求头,格式为Bearer <生成的token>

修改后的测试代码示例:

def test_create_user():
    # 1. 创建测试管理员并存入测试库
    db = TestingSessionLocal()
    # 请根据你的Admin模型实际字段调整
    test_admin = Admin(id=1, email="test_admin@example.com", password="hashed_test_pass")
    db.add(test_admin)
    db.commit()
    db.refresh(test_admin)
    db.close()

    # 2. 生成JWT令牌(复用你代码中的encode方法)
    token = encode({"id": test_admin.id}, JWT_SECRET, algorithms=["HS256"])

    # 3. 发送带认证头的请求
    mail=random_email_user()
    name =random_name_user()
    password = random_pasword_user()
    id=random_int_user()

    response=client.post(
        "/api/users",
        json={"users_email":mail ,"id":id, "users_name": name},
        headers={"Authorization": f"Bearer {token}"}
    )
    assert response.status_code == 201, response.text
    data = response.json()
    assert data["users_email"] == mail

方式二:测试时跳过认证逻辑

适合仅需验证接口业务逻辑,不想处理认证流程的场景,通过FastAPI的依赖覆盖功能跳过认证:

在你的测试代码中,添加对get_curret_admin依赖的覆盖:

# 原有的数据库依赖覆盖
app.dependency_overrides[get_db] = override_get_db

# 新增:覆盖认证依赖,直接返回模拟的管理员对象
def override_get_current_admin():
    # 根据你的Admins模型实际字段调整返回内容
    return Admins(id=1, email="mock_admin@example.com")

app.dependency_overrides[get_curret_admin] = override_get_current_admin

client = TestClient(app)

之后你的原测试函数无需修改,直接发送请求即可跳过认证,正常测试接口逻辑。

内容的提问来源于stack exchange,提问作者Wiskani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:37:14