多个控制器中的 Symfony 3 登录表单

Symfony 3 login form in multiple controllers

我遵循了 this 关于如何在 Symfony 3 中构建登录表单的教程并且一切正常。

但是我想在多个页面(“/”和“/login”)上使用相同的登录表单。不幸的是,根据我在 security.yaml 中配置 "login_path" 和 "check_path" 的方式,我总是只能让这些页面中的一个工作。

所以要么

form_login:
                  login_path: login
                  check_path: login

form_login:
                  login_path: /
                  check_path: /

我尝试添加另一个专门用于登录页面的防火墙以同时使用两者,但没有成功,我在 /login 上的表单似乎会提交并重定向到 default_target_path,但是用户不会登录。我还尝试在控制器的函数 createForm 中设置 'action' 变量,使登录表单即使在索引页面上也提交到 /login,但这也不起作用.

关于如何解决这个问题有什么想法吗?

您是否尝试过使用不同的名称创建第二个条目?我不确定它是否有效,但技术上允许使用不同名称的不同提供商。并且没有要求他们实际上有不同的提供者或不同的实现。

security:
    # ...

    firewalls:
        main:
            # ...
            form_login:
                login_path: login
                check_path: login
        alternative
            # ...
            form_login:
                login_path: /
                check_path: /

如果用户未登录,您可以将他们重定向到登录页面。

//Assuming this is the action for the "/" route

public function indexAction($name)
{
  //If not logged in
  if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
    return $this->redirectToRoute('/login');  
  }

  ...//If logged in
}

您可以只呈现登录页面而不是重定向。