我正在使用FOSUserBundle开发symfony应用程序。如果我没有通过身份验证,我希望在菜单栏中有一个下拉式登录表单,它具有与/ login下的完全不同的样式。我自己的登录表单上的无效CSRF令牌
我收到'无效的CSRF令牌'。我是一个symfony2的新手,所以也许我犯了一个明显的错误,但是我找不到解决方法。这是我的尝试:
控制器:
<?php
namespace RoiRodriguez\CustomUserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\SecurityContext;
class DefaultController extends Controller {
/**
* Para requests internos, renderiza la barra de navegación.
* No tiene ruta.
*/
public function navigationAction() {
$params = array (
'csrf_token' => '',
'last_username' => ''
);
if ($this->container->get ('security.context')->isGranted ('IS_AUTHENTICATED_FULLY')) {
$session = $this->getRequest()->getSession();
$params ['last_username'] = (null === $session) ? '' : $session->get (SecurityContext::LAST_USERNAME);
$params ['csrf_token'] = $this->container->get ('form.csrf_provider')->generateCsrfToken ('authenticate');
}
return $this->render ('CustomUserBundle:Default:navigation.html.twig', $params);
}
}
查看:
<ul class="nav navbar-nav navbar-right">
{% if app.user and app.user.isGranted('IS_AUTHENTICATED_FULLY') %}
{% include 'CustomUserBundle:Default:includes/navigation-authenticated.html.twig' %}
{% else %}
{% include 'CustomUserBundle:Default:includes/navigation-notauthenticated.html.twig' with {'csrf_token': csrf_token, 'last_username': last_username} %}
{% endif %}
</ul>
未通过身份验证模板:
<li><a href="{{ path('fos_user_registration_register') }}">Nueva cuenta</a></li>
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown">Ingresar <b class="caret"></b></a>
<div class="dropdown-menu dd-login-form-container">
<!-- login form -->
<form role="form" method="post"
action="{{ path("fos_user_security_check") }}">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
......
<button type="submit" class="btn btn-primary">Ingresa!</button>
</form>
<!-- end login form -->
<ul>
<li><a href="{{ path('fos_user_resetting_request') }}">¿Has olvidado
tu contraseña?</a></li>
<li><a href="{{ path('fos_user_registration_register') }}">¿Todavía
no tienes una cuenta?</a></li>
</ul>
</div>
</li>
我在想什么?另外:这个下拉菜单也得到渲染内/登录,我会有任何麻烦生成令牌两次?
我非常新的Symfony的,但你可以尝试设置csrf_token为假,可能是它会奏效。 –