我安装了 FOSUserBundle,但我的设计要求登录表单出现在主页中,而不是单独的登录页面,而是包含在由我的 HomeBundle:Default:index 控制的主页中。
因此,如果您访问需要登录的页面,您将被重定向到我的主页,我的登录表单所在的位置。
为了做到这一点:我改变了vendor > friendsofsymfony > user-bundle > FOS > Resources > routing > security.xml
<route id="fos_user_security_login" pattern="/login"> <default key="_controller">FOSUserBundle:Security:login</default> </route>
指向显示我的主页的控制器。这有效(它显示了我的登录页面)但是问题来了,当我尝试登录时它永远不会让我登录,而是显示相同的页面。输入的名称是正确的,也是“动作”,与默认登录表单的值相同。
如果我默认使用登录页面,它会让我登录,所以数据库没问题。我试图打印登录过程可能会导致打印 $error 找出此代码的错误:
$request = $this->container->get('request'); /* @var $request \Symfony\Component\HttpFoundation\Request / $session = $request->getSession(); / @var $session \Symfony\Component\HttpFoundation\Session */
// get the error if any (works with forward and redirect -- see below)
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} elseif (null !== $session && $session->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = '';
}
if ($error) {
// TODO: this is a potential security risk (see http://trac.symfony-project.org/ticket/9523)
$error = $error->getMessage();
}
// last username entered by the user
$lastUsername = (null === $session) ? '' : $session->get(SecurityContext::LAST_USERNAME);
$csrfToken = $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate');
但似乎没有错误。