Symfony Seguridad acción - ¿Cómo que transmita después de la autenticación exitosa?

StackOverflow https://stackoverflow.com/questions/358772

  •  21-08-2019
  •  | 
  •  

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?

¿Fue útil?

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:

http://www.symfony-project.org/plugins/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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top