2013-07-05 100 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> 
相關問題