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

FastAPI如何限制仅指定用户可创建Token

问题分析与解决

你的代码无法限制非字典用户生成Token,核心原因是authenticate_user函数没有正确校验用户名是否存在于你的用户字典中,也没正确匹配密码。以下是修正方案:

1. 定义用户字典

先明确你的合法用户字典(示例如下,替换成你实际的用户数据):

users_db = {
    "alice": "securepass1",
    "bob": "securepass2"
}

2. 实现正确的校验函数

重写authenticate_user,确保先检查用户名是否在字典内,再验证密码:

def authenticate_user(username: str, password: str):
    # 用户名不在字典中直接返回认证失败
    if username not in users_db:
        return False
    # 用户名存在时校验密码是否匹配
    return users_db[username] == password

3. 修正Token接口代码

原代码末尾的raise语句属于冗余代码(永远不会执行),可以删除,最终接口代码如下:

@api.post("/token")
async def get_token(form_data: OAuth2PasswordRequestForm = Depends()):
    if not authenticate_user(username=form_data.username,
                             password=form_data.password):
        raise HTTPException(status_code=403, detail='Authentication failed')
    return {
        "access_token": form_data.username,
        "token_type": "bearer"
    }

这样修改后,只有存在于users_db字典中的用户,且密码匹配时,才能生成Token;非字典内的用户会直接触发403错误,无法生成Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:56:06