Атрибут auto_error
Атрибут auto_error принадлежит классу OAuth2PasswordBearer
и задаётся при создании экземпляра через одноимённый параметр.
Он принимает булево значение и по умолчанию равен True.
Когда атрибут равен True, при отсутствии заголовка
Authorization или при неверной схеме FastAPI сам возвращает
ответ 401 Unauthorized с заголовком WWW-Authenticate.
Когда атрибут равен False, зависимость вместо ошибки
возвращает None, и разработчик сам решает, как обработать
отсутствие токена.
Синтаксис
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
auto_error=True
)
Пример
Давайте создадим экземпляр OAuth2PasswordBearer
с атрибутом auto_error равным True
и защитим маршрут:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
auto_error=True
)
@app.get('/items/')
def read_items(token: str = Depends(oauth2_scheme)):
return {'token': token}
Если обратиться к адресу /items/ без заголовка
Authorization, FastAPI автоматически вернёт ошибку:
{"detail": "Not authenticated"}
Пример
Давайте создадим экземпляр OAuth2PasswordBearer
с атрибутом auto_error равным False
и обработаем отсутствие токена вручную:
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
auto_error=False
)
@app.get('/items/')
def read_items(token: str = Depends(oauth2_scheme)):
if token is None:
raise HTTPException(
status_code=401,
detail='Token is missing'
)
return {'token': token}
Если обратиться к адресу /items/ без заголовка
Authorization, сработает наша проверка:
{"detail": "Token is missing"}
Смотрите также
-
класс
OAuth2PasswordBearer,
который извлекает Bearer-токен из заголовка Authorization -
атрибут
tokenUrl,
который задаёт адрес для получения токена -
метод
__call__,
который вызывается как зависимость и возвращает токен -
функция
Depends,
которая внедряет зависимость в обработчик маршрута