2012-06-05 11 views
8

Hemos configurado correctamente el FOSUserBundle; iniciar sesión, registrarse, restablecer la contraseña, etc., todo está funcionando bien.Symfony FOSUserBundle - incluye el formulario de inicio de sesión en la plantilla de diseño

Ahora queremos incorporar el formulario de inicio de sesión en nuestro diseño general del sitio, especialmente colocando el formulario en la sección superior derecha del encabezado del diseño. Hacer esto sería bastante fácil si solo estuviéramos lidiando con los campos de nombre de usuario y contraseña. Sin embargo, parece que no puede encontrar la manera de obtener el token CSRF que se genera por el servicio FOSUserBundle:

$this->container->get('form.csrf_provider')->generateCsrfToken('authenticate'); 

Traté de llamar a lo anterior dentro de una extensión de la ramita que de otro modo funciona bien sin embargo al parecer, la extensión no puede Haga una referencia adecuada del contenedor.

Seguramente hay alguna manera fácil de obtener el token FOSUserBundle CSRF globalmente?

Gracias! Jason

Respuesta

6

Se puede definir una función como esta en uno de sus controladores

y luego simplemente incrustarlo en su forma via

<input type="hidden" name="_csrf_token" value="{% render('YourBundle:YourController:getToken') %}" /> 

También es necesario incluir lo siguiente en el parte superior de su controlador:

use Symfony\Component\HttpFoundation\Response; 
34

Symfony 2.3:

Una posible solución sería definir el proveedor csrf como una variable de la ramita mundial como esto:

twig: 
    globals: 
     fos_csrf_provider: "@form.csrf_provider" 

Y luego, en su diseño llamarlo así:

<input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.generateCsrfToken('authenticate') }}" /> 

Así que no necesita llamar a ningún controlador.

Symfony 2.4 y posterior:

twig: 
    globals: 
     fos_csrf_provider: "@security.csrf.token_manager" 

y:

<input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.refreshToken('authenticate') }}" /> 
+1

salvó mi día! ¡Muchas gracias! – fanjabi

+3

Esto debe marcarse como la mejor respuesta, más limpia y más fácil que la otra. –

+0

Esta es la mejor y más limpia solución. El controlador de procesamiento en plantillas consume muchos recursos: esta solución es la mejor y más limpia. – Aerendir

Cuestiones relacionadas