2013-03-30 77 views
1

Im做多租戶服務,其中IM用戶進行驗證反對:如何獲得子域UserProvider

的用戶名,密碼,子域

我使用FOSUserBundle

我想用UserProvider要注意從wchich域的調用,然後讓用戶發現。

問題是我無法獲得訪問任何@request我試着容器或設置打針,我得到

有延長FOSUserBundle以任何適當的方式「ScopeWideningInjectionException注射檢測範圍加寬」請了解,當驗證(讓用戶登錄)的用戶名?

回答

0

Finaly我就是這麼做的:

用於SyndMultiTenantBundle爲多租戶與domainstrategy

提出

並作出它與FOSUserBundle一起工作:

  1. 創建新的UserManager & UserRepository類
  2. 覆蓋您的UserManager:loadUserByUsername方法來查詢你的倉庫直接
  3. 編譯器通過使用您的自定義應用管理器(改變
    類定義的)
  4. 添加聽衆對tenant.found致電
    $ userManager-> setTenant($ event-> getTenant())將租戶傳入
    資源庫的範圍

感謝阿德里安從SyndicateTheory

它的工作原理就像一個魅力 - 享受!

0

您是否嘗試過「更改UserProvider的範圍?http://symfony.com/doc/current/cookbook/service_container/scopes.html

my_user_provider: 
    class: Acme\HelloBundle\UserProvider 
    scope: request 
    arguments: [@request] 

不知道它會在這種情況下工作。安全的東西棘手。

另一種可能是創建請求聽衆,讓它拉動子域,然後讓它注入到用戶提供商

+0

它給出了問題,我提出了問題:「ScopeWideningInjectionException:範圍擴展注入檢測」 – nicoonee

+0

然後去請求偵聽器。 – Cerad

0

我有同樣的問題,與Symfony 2.1我能夠給@Service_container作爲參數直接在我的提供商,然後獲取請求。 ..

因爲我更新到2.2 SF,不工作了!

即使您設置「範圍:活動」,或「公衆:真正的」在你的配置。

如果您試圖通過中間監聽程序來獲取請求,它也不會起作用......看起來自SF2.2以來,請求沒有及時注入或類似的東西。

所以在這裏我怎樣才能得到供應商內部的要求,我不知道這是否是乾淨的,但是這是我才發現,我粘貼了2個解決方案,爲SF 2.2和SF 2.1唯一的解決辦法:

SF 2.2

Provider類:

use Symfony\Component\HttpFoundation\Request; 

// ... 

class WebsiteUserProvider implements UserProviderInterface 
{ 
    private $websiteUrl; 

    // ... 

    public function __construct(UserManager $userManager) 
    { 
     $this->userManager = $userManager; 

     // Works for sf2.2, init manually the request 
     $request = Request::createFromGlobals(); 
     $this->websiteUrl = $request->getHost(); 
    } 

    // ... 
} 

這就是它!


SF 2。1

Provider類:

// ... 

class WebsiteUserProvider implements UserProviderInterface 
{ 
    private $websiteUrl; 

    // ... 

    public function __construct($container, UserManager $userManager) 
    { 
     $this->userManager = $userManager; 

     if ($container->isScopeActive('request')) { 
      $this->websiteUrl = $container->get('request')->getHost(); 
     } 
    } 

    // ... 
} 

配置:

sybio_website.user_provider: 
    class: Sybio\Bundle\WebsiteBundle\Security\Authentication\Provider\WebsiteUserProvider 
    arguments: [@service_container, @sybio.user_manager] 
+0

如果somone能夠說明發生了什麼變化,那將會很好2.1 - > 2.2 it劑量工作了 – nicoonee

+0

如果您使用請求偵聽器,那麼請求將會是事件的一部分。不需要注入它。 – Cerad

+0

@nicoonee你試過我的解決方案爲SF 2.2嗎?它適用於我的項目。 – Sybio