В 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" все просмотрел.