Symfony2 chain providers

Решил использовать несколько провайдеров и нашел в документации такой пример:

# app/config/security.yml
security:
    providers:
        chain_provider:
            chain:
                providers: [in_memory, user_db]
        in_memory:
            memory:
                users:
                    foo: { password: test }
        user_db:
            entity: { class: Acme\UserBundle\Entity\User, property: username }

И подумалось мне, что работать провайдеры будут так:

  • если 1-ый провайдер не опознал пользователя, то переходим ко второму
  • если 2-ой провайдером не опознал пользователя, то переходим ко третьему
  • и т.д.

Однако, на деле оказалось что такая логика работает, только если провайдеры разного типа.

Напомню, Symfony поддерживает следующие типы провайдеров:

  • x509 - авторизация процедуры распределения открытых ключей с помощью сертификатов с цифровыми подписями
  • http_basic - имя пользователя и пароль включаются в состав веб-запроса (HTTP POST или HTTP GET)
  • http_digest - пароль не используется непосредственно, вместо этого клиент авторизуется на сервере с помощью MD5 (username: realm: password)
  • memory - просто в конфиге указываются логины и пароли пользователей (можно указать разные роли)
  • entity - указывается класс сущности и поле по которому будет выполнятся поиск пользователя в базе данных (обычно это поле email)
  • id - указывается название сервиса, который является классом-провайдером

Поэтому, если Вы рассчитывали реализовать 2 одинаковых типа провайдера, но различающихся логикой (например один ищет пользователя в MySQL, а второй в MongoDB), то такую логику нужно реализовывать в одном провайдере (с типом id). 

p.s. для каждого из типов авторизации, можно указывать нужный Вам провайдер, например так:

    firewalls:
        ...
        somename:
            ...
            x509:
                provider: some_key_from_above
            http_basic:
                provider: some_key_from_above
            http_digest:
                provider: some_key_from_above
            ...

some_key_from_above - имя провайдера, например in_memory или user_db (не путайте с типом провайдера).

Удачки. 

Оцени публикацию:
  • 1,5
Оценили человек: 1
Теги : symfony, chain providers, authentication mechanisms, authorization types, authentication, symfony provider types

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2017 YaPro.Ru

Главная » Веб-мастеру » PHP »