chain_provider и провайдер аутентификации - PullRequest
3 голосов
/ 10 ноября 2011

При использовании chain_provider с Doctrine и пользовательским провайдером пользователя, предполагается ли также использовать провайдер аутентификации провайдера?

У меня возникла проблема с использованием пользовательского провайдера пользователя в chain_provider, как описано ниже:

providers:
    chain_provider:
        providers: [doctrine, egzakt_backend_ldap]
    doctrine:
        entity: { class: Egzakt\Backend\UserBundle\Entity\User }
    egzakt_backend_ldap:
        id: egzakt_backend_ldap.security.user.provider

firewalls:
   secured_area:
        pattern: /admin/
        form_login:
            provider: chain_provider
            check_path: /admin/login_check
            login_path: /admin/login

Проблема в том, что поставщик пользователя egzakt_backend_ldap вызывается правильно, но не хорошим поставщиком аутентификации.Вместо того, чтобы вызываться «LdapAuthenticationProvider», который я объявил как сервис на своей фабрике, он вызывается как «Symfony \ Component \ Security \ Core \ Authentication \ ProviderDaoAuthenticationProvide‌r» и всегда возвращает «Представленный пароль недействителен», потому чтоон не использует хорошего провайдера аутентификации для проверки учетных данных.

НО, если использовать точку входа напрямую, он работает.Проблема в том, что я хочу использовать ОБА Doctrine и Ldap для входа в систему, если Doctrine не удается, он возвращается к Ldap:

firewalls:
   secured_area:
        pattern: /admin/
        egzakt_backend_ldap:
            check_path: /admin/login_check
            login_path: /admin/login

Таким образом, он использует хороший поставщик аутентификации и пользовательский поставщик.

Кто-нибудь имеет представление о том, что мне не хватает?

1 Ответ

1 голос
/ 12 июля 2014

Вы должны изменить свой providers раздел конфигурации следующим образом:

providers:
    chain_provider:
        chain:
            providers: [doctrine, egzakt_backend_ldap]
doctrine:
    entity: { class: Egzakt\Backend\UserBundle\Entity\User }
egzakt_backend_ldap:
    id: egzakt_backend_ldap.security.user.provider

Вы пропустили клавишу chain, chain_provider - это просто имя.

...