FastAPI 从 API 键获取用户 ID
FastAPI get user ID from API key
在 fastAPI 中,可以简单地在路由器级别编写安全依赖项并保护整个 URL 的一部分。
router.include_router(
my_router,
prefix="/mypath",
dependencies=[Depends(auth.oauth2_scheme)]
)
这样可以避免重复很多代码。
唯一的问题是我想用路由器级别的依赖性来保护部分 URL,该依赖性检查用户令牌的有效性并检索该令牌的用户 ID。
我发现的唯一方法是为所有函数添加另一个依赖项,但这会导致重复我刚刚保存的代码。
长话短说,有没有办法在路由器级别添加依赖项、检索和 return 用户 ID,并将 returned 值传递给处理函数?像
router.py
router.include_router(
my_router,
prefix="/mypath",
dependencies=[user_id = Depends(auth.oauth2_scheme)]
)
my_router.py
my_router = APIRouter()
@my_router.get("/my_path")
async def get_my_path(**kwargs):
user_id = kwargs["user_id"]
# Do stuff with the user_id
return {}
一旦用户在依赖函数中通过身份验证,将 user_id 添加到 request.state
,然后在您的路由上您可以从请求对象访问它。
async def oauth2_scheme(request: Request):
request.state.user_id = "foo"
my_router = APIRouter()
@my_router .get("/")
async def hello(request: Request):
print(request.state.user_id)
app.include_router(
my_router,
dependencies=[Depends(oauth2_scheme)]
)
在 fastAPI 中,可以简单地在路由器级别编写安全依赖项并保护整个 URL 的一部分。
router.include_router(
my_router,
prefix="/mypath",
dependencies=[Depends(auth.oauth2_scheme)]
)
这样可以避免重复很多代码。
唯一的问题是我想用路由器级别的依赖性来保护部分 URL,该依赖性检查用户令牌的有效性并检索该令牌的用户 ID。
我发现的唯一方法是为所有函数添加另一个依赖项,但这会导致重复我刚刚保存的代码。
长话短说,有没有办法在路由器级别添加依赖项、检索和 return 用户 ID,并将 returned 值传递给处理函数?像
router.py
router.include_router(
my_router,
prefix="/mypath",
dependencies=[user_id = Depends(auth.oauth2_scheme)]
)
my_router.py
my_router = APIRouter()
@my_router.get("/my_path")
async def get_my_path(**kwargs):
user_id = kwargs["user_id"]
# Do stuff with the user_id
return {}
一旦用户在依赖函数中通过身份验证,将 user_id 添加到 request.state
,然后在您的路由上您可以从请求对象访问它。
async def oauth2_scheme(request: Request):
request.state.user_id = "foo"
my_router = APIRouter()
@my_router .get("/")
async def hello(request: Request):
print(request.state.user_id)
app.include_router(
my_router,
dependencies=[Depends(oauth2_scheme)]
)