gpt4 book ai didi

python - fastapi - 可选的 OAuth2 身份验证

转载 作者:行者123 更新时间:2023-12-04 14:08:42 25 4
gpt4 key购买 nike

我需要创建一个带有路由的 API,该路由能够识别当前用户是否是请求中指示的用户(也没有身份验证应该有效)
对于我遵循的其他路径 https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/一切都与带有 JWT token 的 Bearer 一起使用

user: User = Depends(get_current_active_user)
修改我尝试使用的文档提供的方法
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth")

async def get_user_or_none(db: Session = Depends(get_db), token: str = Depends(oauth2_scheme)):
"""
Return the current active user if is present (using the token Bearer) or None
"""
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
username: str = payload.get("sub")
if username is None:
return None
except JWTError:
return None

# check user in db
user = crud.get_user(db, username)
if user is None:
return None
return user

@router.get("/api/{user_id}/structure")
async def get_user_structure(
user_id: int,
user = Depends(get_user_or_none),
db: Session = Depends(get_db)
):
# do_something() if user.id == user_id else do_something_else()
但我收到一个错误
401 Error: Unauthorized {
"detail": "Not authenticated"
}

最佳答案

您需要使用不同的 OAuth2PasswordBearer对于这些可选的身份验证端点 auto_error=False ,例如

optional_oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth", auto_error=False)

async def get_user_or_none(db: Session = Depends(get_db), token: str = Depends(optional_oauth2_scheme)):
...
现在 token 将是 NoneAuthorization未提供 header ,导致您想要的行为。

关于python - fastapi - 可选的 OAuth2 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66254024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com