2015-11-12 125 views
0

這一問題的原因是從合作者的要求,誕生了:我想知道我是否可以刪除提供商。是強制性的?如果我可以將其方法留空,我想刪除它。Symfony2可以在沒有UserProvider的情況下工作嗎?

所以,在Symfony 供應商配置是強制。另外我需要配置至少一個提供商。完成!我的定製服務是這樣的:

final class CustomListener implements UserProviderInterface                 
{                               
    public function loadUserByUsername($username)                   
    {                              
     // ...                            
    }                              

    public function refreshUser(UserInterface $user)                  
    {                              
     return $user;                          
    }                              

    public function supportsClass($class)                     
    {                              
     // ...                            
    }                              
} 

我可以登錄。登出。 ......但我有點困惑。爲什麼界面想要這些「無用的」,目前,loadUserByUSernamesupportsClass?無用的含義:我有空的實現,它的工作原理!工作,意味着我通過$request->getSession()->set('firefall', $token);手動設置會話,並且用戶已通過身份驗證。我可以註銷用戶失效會話。

我相信,至少,這個供應商需要的是refreshUser返回的UserInterface:

public function refreshUser(UserInterface $user)                  
    {                              
     return $user;                          
    } 

因爲登錄不沒有這個回報的工作。但是我可以將其他方法留空。

我看着裏面測試,並在UserProviderInterface方法的意見。但沒有。我沒有得到,如果我可以:

  • remove provider;
  • 我錯過了文檔中的東西;
  • 我試圖用嚴重的Symfony(可能);
  • 我是一個茶壺;
  • ...
  • -

而且,....爲什麼登錄不,當我註釋此行,即使我的防火牆不使用該供應商合作?

public function refreshUser(UserInterface $user)                  
    {                              
     // return $user;                          
    } 

-

我創造了這個CustomListener只是因爲我已經定義 服務爲供應商。然後我收到以下消息:

傳遞給Symfony \ Component \ Security \ Core \ Authentication \ Provider \ DaoAuthenticationProvider :: __ construct()的參數1必須是Symfony \ Component \ Security \ Core \ User \ UserProviderInterface的一個實例,

回答

1

用戶提供通知的Symfony從哪裏加載的用戶,所以你需要一個,但你並不需要創建自己的,除非你有一個複雜的認證系統。

如果你從數據庫中加載的用戶,你可以使用默認DB提供http://symfony.com/doc/current/cookbook/security/entity_provider.html

+0

我不是一個數據庫。我只是一個用於用戶身份驗證的API,並且還提供數據。我沒有使用教義。 – sensorario

+0

如果您使用的是API,那麼您的身份驗證如何與空的用戶提供者協同工作? Symfony如何知道如何加載用戶? –

+0

在控制器內部,我使用HTTP客戶端來詢問API是否良好,如果它返回給我一些特定的值,我這樣做:'$ request-> getSession() - > set('_ security_secured_area',$ this-> token-> createFromRequest($ request));' – sensorario

相關問題