Symfony 2自定义用户提供程序

时间:2013-07-05 00:13:18

标签: symfony shibboleth

我正在努力让ShibbolethBundle(https://github.com/rmoreas/ShibbolethBundle)工作。但坚持在登录时创建新用户。我发现userProvider不是正确的类(在这里实现了ShibbolethUserProviderInterface https://github.com/rmoreas/ShibbolethBundle/blob/master/Security/ShibbolethAuthProvider.php#L109

我的自定义提供程序定义如下:

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)陈述

  

完成实施,安全层的配置   必须更改以告诉Symfony使用新的自定义实体提供程序   而不是通用的Doctrine实体提供者。这是微不足道的   通过删除中的属性字段来实现   security.yml的security.providers.administrators.entity部分   文件。

试过了,没用。用户提供程序类仍然是“Symfony \ Bridge \ Doctrine \ Security \ User \ EntityUserProvider”。

我想知道删除属性字段,symfony如何找到我的自定义用户提供程序?

感谢。

1 个答案:

答案 0 :(得分:0)

我明白了。似乎DI容器只是创建" EntityUserProvider"当指定"实体"在security.xml中的提供程序中。然后AuthenticationProvider只调用用户提供程序中的方法。所以我必须为用户提供者创建一个服务,并在security.xml中的providers部分指定ID。

的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>