我正在使用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爲假,可能是它會奏效。 –