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

Параметр allow_credentials

Параметр allow_credentials применяется к промежуточному слою CORSMiddleware и управляет передачей учётных данных при кросс-доменных запросах. Учётные данные - это cookies, заголовки авторизации и TLS-сертификаты клиента. Параметр принимает значение True или False и по умолчанию равен False. Когда он включён, сервер добавляет в ответ заголовок Access-Control-Allow-Credentials: true, а браузер начинает передавать cookies и заголовок Authorization.

Важно помнить: при allow_credentials=True нельзя использовать звёздочку '*' в параметрах allow_origins, allow_methods и allow_headers. Нужно перечислять конкретные источники, методы и заголовки. Иначе браузер отклонит ответ, хотя сервер его отправит.

Синтаксис

from fastapi.middleware.cors import CORSMiddleware app.add_middleware( CORSMiddleware, allow_credentials=True, ... )

Параметр передаётся именованным аргументом при добавлении промежуточного слоя через метод add_middleware.

Пример

Давайте включим передачу учётных данных для одного конкретного источника:

from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=['http://localhost:3000'], allow_credentials=True, allow_methods=['GET', 'POST'], allow_headers=['Authorization', 'Content-Type'], ) @app.get('/') def index(): return {'text': 'hello'}

Теперь браузер сможет отправлять cookies и заголовок Authorization с адреса http://localhost:3000. Сервер вернёт заголовок:

Access-Control-Allow-Credentials: true

Пример

Давайте посмотрим, что произойдёт, если оставить значение по умолчанию False:

from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=['*'], allow_credentials=False, allow_methods=['*'], allow_headers=['*'], ) @app.get('/') def index(): return {'text': 'hello'}

В этом случае заголовок Access-Control-Allow-Credentials в ответе отсутствует, а cookies и заголовок Authorization браузер не передаст.

Пример

Давайте проверим работу параметра на нескольких разрешённых источниках:

from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=[ 'http://localhost:3000', 'https://example.com', ], allow_credentials=True, allow_methods=['GET', 'POST', 'PUT', 'DELETE'], allow_headers=['Authorization', 'Content-Type'], ) @app.get('/user') def user(): return {'name': 'abcde'}

Результат выполнения запроса с адреса http://localhost:3000:

{"name": "abcde"}

При этом ответ содержит заголовок Access-Control-Allow-Credentials: true и конкретный источник Access-Control-Allow-Origin вместо звёздочки.

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

  • класс CORSMiddleware,
    который настраивает кросс-доменные запросы
  • параметр allow_origins,
    который задаёт разрешённые источники запросов
  • параметр allow_methods,
    который задаёт разрешённые HTTP-методы
  • параметр allow_headers,
    который задаёт разрешённые заголовки запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить