xenon
@xenon
Too drunk to fsck

Как реализовать более гибкий CORS в FastAPI / Starlette?

В FastAPI из коробки советуется использовать CORSMiddleware для реализации CORS. Это хорошо подходит когда у всего приложения один список разрешенных origin, которые задаются при инициализации.

Но у меня штука сложнее, у меня есть методы вроде:
@router.get('/{tenant}/{dataset}/{search_name}')
def ds_named_search(tenant:str, dataset: str, search_name: str):
   ...


И разрешенные origins зависят от параметра tenant, и определяются по ходу выполнения кода. Например, если tenant=a, то разрешен origin с https://a.com , а если tenant=b, то с https://b.com.

Конечно, можно просто ручками сравнивать хидер и сделать обработчик для метода Options, для pre-flight запросов - но это некрасиво. Поэтому, два вопроса:

1. Как выполнить проверку CORS правильным (и, желательно, стандартным для fastapi) способом? Может быть есть какой-то пакет, о котором я не знаю?
2. Может быть есть какие-то проекты на FastAPI / Starlette где для разных запросов могут быть разные Origin - можете такие посоветовать, назвать? Я бы их посмотрел и оттуда выдрал решение.

В доступной доке по CORSMiddleware не нашел, как решить задачу. На гитхабе по "fastapi cors" все просмотрел.
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы