php - framework - symfony 3
"No se encontrĂ³ un Token en el SecurityContext" en Silex/Symfony (2)
Creé un proyecto Silex con un mecanismo de inicio de sesión.
Como no soy un experto en Symfony, seguí estrictamente las pautas aquí para el proceso de autenticación: http://silex.sensiolabs.org/doc/providers/security.html
... y funciona bien en mi entorno de desarrollo
Sin embargo, cuando implementé mi proyecto en mi servidor de producción, recibo el siguiente error cada vez que intento iniciar sesión en mi aplicación web.
[2012-12-18 16:35:33] CRITICAL: Symfony/Component/Security/Core/Exception/AuthenticationCredentialsNotFoundException:
A Token was not found in the SecurityContext. (uncaught exception) at
/my/app/path/vendor/symfony/security/Symfony/Component/Security/Http/Firewall/AccessListener.php line 53 [] []
lo que significa que el siguiente código en AccessListener.php
$this->context->getToken());
arroja una expección
Dado el hecho de que el mismo código funciona perfectamente bien en mi entorno de desarrollo, supongo que tiene algo que ver con la configuración de mi servidor de producción.
Encontré este hilo http://groups.google.com/forum/#!msg/symfony-devs/jKphNy_0Q2Y/vYfkAuyjSHEJ que sugiere agregar la siguiente línea al .htaccess de mi proyecto.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
sin resultado Sigo recibiendo la excepción "A Token was not found in the SecurityContext".
Alguien tiene una idea ?
Editar El contenido de $app[''security.firewalls'']
es el siguiente
$app->register(new Silex/Provider/SecurityServiceProvider(), array(
''security.firewalls'' => array(
''login'' => array(
''pattern'' => ''^/login$''
),
''admin'' => array(
''pattern'' => ''^/'',
''form'' => array(''login_path'' => ''/login'', ''check_path'' => ''/admin/login_check''),
''logout'' => array(''logout_path'' => ''/admin/logout''), // url to call for logging out
''users'' => array(
''admin'' => array(''ROLE_ADMIN'', ''SOMEPASSWORD''),
),
)
)
));
Lo más probable es que la razón por la cual esto funcione en su máquina local pero no en su entorno productivo es que .htaccess es compatible con Apache, mientras que nginx no se molesta en perder E / S y tiempo de CPU analizando estos archivos
Si publica su .htaccess, le mostraré cómo traducir esto a la configuración legible para nginx.
EDITAR
Silex incluso tiene un ejemplo de configuración para nginx
Parece que no tiene nada que ver con HTTP Basic Auth, porque no lo usa en ninguno de sus firewalls. Lo que usa es un firewall con un punto de entrada de form
, que luego usa la sesión para almacenar el token de seguridad.
Le sugiero que vea cómo se administran las sesiones (y las cookies) en el servidor de prod en comparación con su entorno de desarrollo.