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
相关产品推荐
相关产品推荐

