В fastAPI можно просто написать зависимость безопасности на уровне маршрутизатора и защитить всю часть URL-адресов.
router.include_router(
my_router,
prefix="/mypath",
dependencies=[Depends(auth.oauth2_scheme)]
)
Это позволяет избежать повторения большого количества кода.
Единственное проблема в том, что я хотел бы защитить часть URL-адресов зависимостью уровня маршрутизатора, которая проверяет действительность токена пользователя и извлекает идентификатор пользователя для этого токена.
Единственный способ, который я нашел, - это добавить еще один зависимости от всех функций, но это приводит к повторению кода, который я только что сохранил.
Короче говоря, есть ли способ добавить зависимость на уровне маршрутизатора, получить и вернуть идентификатор пользователя и передать возвращаемое значение функции обработки? Что-то вроде
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 {}