我正在使用FastAPI的writefile(JWT / Bearer令牌)中详细介绍的身份验证方案。当我尝试从/token
端点获取令牌时,请求将在运行路径操作功能之前失败。这是有问题的功能:
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), session: SessionLocal = Depends(get_db)):
user = authenticate_user(session, form_data.username, form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token = create_access_token(data={"sub": user.id})
return {"access_token": access_token, "token_type": "bearer"}
我通常使用断点来帮助弄清楚在这种情况下出了什么问题,但是该调用在函数中的任何代码实际运行之前都失败了,使我相信问题与OAuth2PasswordRequestForm
依赖有关。我通过禁用form_data parameter
验证了这是问题所在,并且能够执行完整的请求。
我遇到的错误在细节上很少。这是控制台中显示的内容:INFO: 127.0.0.1:52261 - "POST /token HTTP/1.1" 400 Bad Request
这是我在Swagger用户界面中看到的内容:
这对我来说是本教程中使用的单文件格式,但是从那以后,我将内容分解为不同的文件以使我的较大项目井井有条。我有一种感觉,就是我在重新组织这段代码时错过了一些东西,但是似乎无法弄清楚是什么原因造成的。
答案 0 :(得分:3)
当然,此问题的解决方案是在the docs中。问题是我缺少python-multipart
依赖性。我刚运行pip install python-multipart
并重新启动了服务器,然后便可以进行身份验证。
孩子们,请阅读文档!