--- title: Собрать требования AND и OR description: Потребуйте несколько credentials или выберите доступную альтернативу. sources: - eazy_sdk.auth.all_of - eazy_sdk.auth.any_of api_fingerprint: "sha256:dd2902f6d64a707200682f063ddf2ae21705263a5d3241c73bac74b6b07ff310" --- `all_of(...)` объединяет схемы в одно обязательное требование. `any_of(...)` перечисляет альтернативы и выбирает первую, для которой `Identity` содержит все источники. :::::{grid} 1 1 2 2 :class-container: http-exchange :gutter: 2 ::::{grid-item} :class: http-panel http-panel--request **→ Запрос** · ``GET /auth/combined`` ```json { "headers": { "X-Device-Key": "device-7", "Authorization": "Bearer access-1" } } ``` :::: ::::{grid-item} :class: http-panel http-panel--response **← Ответ** · ``200 OK`` ```json {"credential": "device-7+access-1"} ``` :::: ::::: ```{literalinclude} ../../../../../../examples/docs/auth_combined.py :language: python :start-after: "# region docs: auth-combined" :end-before: "# endregion docs: auth-combined" ``` | Выражение | Условие вызова | |---|---| | `all_of(A, B)` | Доступны одновременно `A` и `B` | | `any_of(A, B)` | Доступна хотя бы одна схема | | `any_of(all_of(A, B), C)` | Доступны `A` с `B` или одна `C` | | `security=None` | Операция отключает требование роутера | В примере у `any_of` одна составная альтернатива, поэтому нужны оба источника. Для варианта «оба или cookie» добавьте вторую схему: `any_of(all_of(DEVICE_KEY, ACCESS_TOKEN), COOKIE)`. :::{dropdown} Файл целиком ```{literalinclude} ../../../../../../examples/docs/auth_combined.py :language: python ``` ::: ```text credentials: device-7+access-1 ``` ## Дальше - {doc}`Передать API key ` - {doc}`Передать Bearer token ` - {doc}`Справочник Auth `