Symfony Seguridad acción - ¿Cómo que transmita después de la autenticación exitosa?
Pregunta
Con la Seguridad de la Acción de Symfony si un usuario no se ha identificado que será remitida a la acción de acceso por defecto como se define en el archivo settings.yml las aplicaciones. ¿Cómo voy a llevar al usuario a la acción solicitada originalmente después de que el usuario se autentica correctamente?
Solución
En primer golpe a su acción de acceso, almacenar árbitro a la sesión de usuario:
if(!$this->getUser()->hasParameter('referer'))
{
$this->getUser()->setParameter('referer',$this->getRequest()->getReferer());
}
y luego, cuando entrada tiene éxito, redirigir usuario árbitro almacenado con:
$this->redirect($this->getUser()->getParameter('referer'));
Tienes ejemplo completo en sfGuardPlugin:
Otros consejos
Más sencillamente ...
$this->getUser()->setReferer($this->getRequest()->getReferer());
como
setReferer($referer)
{
if (!$this->hasAttribute('referer'))
$this->setAttribute('referer', $referer);
}
Un problema relacionado, pero en lugar de tratar de realizar el avance de una acción diferente:
Si usted tiene una acción protegida por sfGuard que está tratando de redirigir a la de referencia, obtendrá un bucle de redireccionamiento después de iniciar sesión. Esto se debe a la página de registro de sfGuard Wil convertirse en la referencia. Un parámetro o atributo se pueden guardar a través de múltiples peticiones si se almacena en la acción de inicio de sesión que el anterior, es decir, la acción podría estar volviendo a dirigir a una página incorrecta si ya firmado. La solución es utilizar un flash que será olvidado. Esto se puede lograr con el código siguiente en el método executeSignin de sfGuardAuthActions:
if ($this->getUser()->hasFlash('referer'))
{
$this->getUser()->setFlash('referer', $this->getUser()->getFlash('referer'));
}
else
{
$this->getUser()->setFlash('referer', $this->getRequest()->getReferer());
}
Al restaurar el flash en el primer bloque, que no será olvidado entre los intentos de inicio de sesión, y mediante el uso de un flash, acceder desde otras páginas no pueden interferir con su acción.