2013-07-05 2 views
1

Я пытаюсь получить ShibbolethBundle (https://github.com/rmoreas/ShibbolethBundle). Но застрял в создании нового пользователя при входе в систему. Я узнал, что userProvider не правильный класс (один реализует ShibbolethUserProviderInterface здесь https://github.com/rmoreas/ShibbolethBundle/blob/master/Security/ShibbolethAuthProvider.php#L109Symfony 2 Пользовательский поставщик

Мой пользовательский поставщик определяется следующим образом:

namespace Meot\FormBundle\Entity; 
... 
class UserRepository extends EntityRepository implements ShibbolethUserProviderInterface { 
... 
} 

security.xml

.... 
security: 
     providers: 
      main_provider: 
       entity: { class: Meot\FormBundle\Entity\User } 

     firewalls: 
      dev: 
       pattern: ^/(_(profiler|wdt)|css|images|js)/ 
       security: false 
      secured_area: 
       pattern: ^/ 
       shibboleth: ~ 
       logout: 
        path: /logout 
        target:/
        success_handler: security.logout.handler.shibboleth 

я нашел эта поваренная книга (http://symfony.com/doc/current/cookbook/security/entity_provider.html) содержит

To finis h реализация, настройка уровня безопасности должна быть изменена, чтобы сообщить Symfony о том, чтобы использовать новый поставщик настраиваемых сущностей вместо общего поставщика сущности Doctrine. Тривиально до достичь путем удаления поля свойства в разделе security.providers.administrators.entity файла security.yml .

Пробовал, не работал. Класс провайдера пользователя по-прежнему «Symfony \ Bridge \ Doctrine \ Security \ User \ EntityUserProvider».

Мне интересно, удалив поле свойства, как symfony может найти моего пользовательского поставщика услуг?

Спасибо.

ответ

0

Я понял. Кажется, контейнер DI просто создает «EntityUserProvider», когда указан «объект» в провайдере в security.xml. Затем AuthenticationProvider просто вызывает методы в пользовательском провайдере. Поэтому мне нужно создать службу для поставщика услуг и указать идентификатор в разделе поставщиков в security.xml.

SRC/Meot/FormBundle/Ресурсы/конфигурации/services.xml

<parameters> 
    <parameter key="custom_user_provider.class">Meot\FormBundle\Entity\UserRepository</parameter> 
    <parameter key="custom_user_entity">Meot\FormBundle\Entity\User</parameter> 
</parameters> 
<services> 
    <service id="custom_user_provider" class="%custom_user_provider.class%" 
     factory-service="doctrine" factory-method="getRepository"> 
     <argument>%custom_user_entity%</argument> 
    </service> 
</services>