2012-03-22 114 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