2012-03-22 118 views
5

我正在使用FOSUserBundle,我需要能夠從2個不同路由(或更多)登錄。這些路線將有不同的模板,也可以登錄到不同的區域。登錄之間唯一不同的是需要的權限。 的路線將沿的Symfony2 - FOSUserBundle - 多個登錄位置

線的東西site.com/login

site.com/admin/login

,也可能site.com/ajax_login

我一直能夠解決如何通過從FOSUserBundle login.html.twig(即被覆蓋)剝離除CSRF令牌以外的所有其他內容,然後創建路由來呈現自己的登錄框以及登錄路由,從而獲取不同的模板以進行呈現CSRF令牌得到呈現)。 這不適用於管理員/登錄,因爲表單發回登錄,如果失敗,它會顯示該頁面。

有沒有簡單的方法來實現這一目標?

+0

你說的是不同的防火牆嗎? – tamir 2012-04-01 09:07:02

+0

您是如何在多個模板中使用登錄表單的? – httpete 2013-03-10 06:34:48

回答

0

你可以發佈你的模板?

您是否在模板中正確編輯了路徑?

<form action="{{ path('form_submit') }}" method="post" {{ form_enctype(form) }}> 

您想要將表格發送到正確的控制器。

1

這是我最終來到了,基本上都使用相同的防火牆和共享相同的背景,所以當我通過正常的登錄,他們還可以訪問管理員登錄(假設他們都是admin)

firewalls: 
    admin: 
     context:   site 
     switch_user:  true 
     pattern:   /admin(.*) 
     form_login: 
      provider:  fos_userbundle 
      login_path:  /admin/login 
      success_handler: admin_authentication_handler 
      use_forward: false 
      check_path:  /admin/login_check 
      failure_path: null 
      use_referer: true 
      always_use_default_target_path: true 
      default_target_path: /admin/ 
     logout: 
      path:   /admin/logout 
      target:   /admin/login 
     anonymous: true 
    public: 
     pattern: ^/ 
     context:   site 
     form_login: 
      login_path:  /login 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 
      provider: fos_userbundle 
     anonymous: true 
     logout: true 

當然,如果您需要製作一個AJAX登錄框,您需要覆蓋成功和失敗處理程序,並檢查請求是否爲XmlHttpRequest並返回登錄結果。

2

我被困在一個相同的問題一段時間,然後我自己創建了一個解決方案。我知道必須有一個簡單的解決方案...

我已經提交了拉請求,它允許您更容易地創建新的登錄模板。檢查這裏的拉動請求:https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1186

另外還有一個很簡單的方法來實現這個目標。擴展SecurityController和更改renderLogin方法有以下內容

protected function renderLogin(array $data, $template) 
{ 
    return $this->container->get('templating')->renderResponse('YourBundle:Security:login.html.twig'); 
} 

然後創建一個路由到新創建的控制器:

admin.login: 
    pattern: /admin/login 
    defaults: { _controller: YourBundle:Security:login } 

在此之後只有你所要做的就是相應地改變你的安全配置。將你的form_login login_path改爲/ admin/login,你很好。

+0

您的拉取請求有錯誤,因此尚未合併到FOSUserBundle中。你有更新嗎? – Mondane 2015-09-08 18:38:23