РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
214 of 307 menu

Класс OAuth2PasswordBearer

Класс OAuth2PasswordBearer применяется для защиты маршрутов с помощью OAuth2-аутентификации по паролю. Первым параметром передаётся tokenUrl - адрес, на который клиент отправляет логин и пароль для получения токена. Класс является вызываемым объектом: при добавлении его в зависимость через Depends он извлекает токен из заголовка Authorization с типом Bearer и возвращает его строкой. Если токен отсутствует, возвращается ошибка 401.

Синтаксис

from fastapi.security import OAuth2PasswordBearer oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')

Пример

Давайте создадим схему OAuth2PasswordBearer и защитим маршрут, возвращающий токен:

from fastapi import FastAPI, Depends from fastapi.security import OAuth2PasswordBearer app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token') @app.get('/users/me') def read_users_me(token: str = Depends(oauth2_scheme)): return {'token': token}

Результат выполнения кода для токена 'abcde':

{"token": "abcde"}

Пример

Давайте добавим маршрут /token, который принимает логин и пароль через форму и возвращает токен доступа:

from fastapi import FastAPI, Depends from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token') @app.post('/token') def login(form_data: OAuth2PasswordRequestForm = Depends()): return {'access_token': form_data.username, 'token_type': 'bearer'} @app.get('/users/me') def read_users_me(token: str = Depends(oauth2_scheme)): return {'token': token}

Результат выполнения кода для пользователя 'user':

{"access_token": "user", "token_type": "bearer"}

Пример

Давайте отключим автоматическую ошибку через параметр auto_error и вернём None при отсутствии токена:

from fastapi import FastAPI, Depends from fastapi.security import OAuth2PasswordBearer app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token', auto_error=False) @app.get('/users/me') def read_users_me(token: str = Depends(oauth2_scheme)): if token is None: return {'message': 'no token'} return {'token': token}

Результат выполнения кода без заголовка Authorization:

{"message": "no token"}

Смотрите также

  • класс OAuth2PasswordRequestForm,
    который принимает логин и пароль из формы
  • функция Depends,
    которая внедряет зависимость в обработчик
  • класс OAuth2,
    который описывает базовую схему OAuth2
  • метод call,
    который извлекает токен из запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить