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

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

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

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