Fastapi валидация заголовка запроса через pydantic
3дpacтвyйтe, а как можно ли как-нибудь валидировать заголовок запроса через pydantic?
from pydantic import BaseModel, constr
class Token(BaseModel):
token: constr(min_length=32, max_length=32)
def test_auth(token: str = Header(alias='Authorization'), session: Session = Depends(get_db)):
# вот тут нужно проверить заголовок на валидность из схемы
if not session.query(User).filter_by(token=token).one_or_none():
raise HTTPException(401)
return token
@router.put('/')
def put(session: Session = Depends(get_db), token: str = Depends(test_auth)):
pass
Ответы (1 шт):
Автор решения: Влад Виноградов
→ Ссылка
Для начала можно глянуть в доку, там есть много примеров аутентификации и авторизации с уже готовыми примерами:
Рекомендую рассматривать варианты оттуда для начала и только потом что-то свое писать.
Depends - довольно удобная штука, если через нее не получается, то всегда можно обойтись обычным вариантом.
from pydantic import BaseModel, constr, ValidationError
class Token(BaseModel):
token: constr(min_length=32, max_length=32)
def test_auth(token: str | None, session: Session):
# вот тут нужно проверить заголовок на валидность из схемы
try:
t = Token(token=token).token
except ValidationError as e:
raise HTTPException(401)
if not session.query(User).filter_by(token=t).one_or_none():
raise HTTPException(401)
return t
@router.put('/')
def put(request: Request, session: Session = Depends(get_db)):
test_auth(token=request.headers.get('Authorization'))
...