2013-07-05 105 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)陈述

要finis在实现中,必须改变安全层 的配置,以告知Symfony使用新的自定义实体提供者 而不是通用的Doctrine实体提供者。通过删除security.yml 文件的security.providers.administrators.entity部分中的 属性字段可以实现 的微不足道。

试过了,没有工作。用户提供者的类仍然是“Symfony \ Bridge \ Doctrine \ Security \ User \ EntityUserProvider”。

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

谢谢。

回答

0

我想通了。看来DI容器只是在security.xml中的提供者中指定“实体”时才创建“EntityUserProvider”。然后AuthenticationProvider只是调用用户提供者中的方法。所以我必须为用户提供者创建一个服务,并在security.xml的provider部分指定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> 
相关问题