Sécurité d'action Symfony - Comment transmettre après une authentification réussie?

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

  •  21-08-2019
  •  | 
  •  

Question

Avec la sécurité d'action Symfony si un utilisateur n'a pas été identifié, il sera transmis à l'action de connexion par défaut tel que défini dans le fichier des applications. Comment puis-je transmettre à l'utilisateur de l'action initialement demandé une fois l'utilisateur authentifié avec succès?

Était-ce utile?

La solution

Le premier coup à votre action de connexion, magasin referer à la session de l'utilisateur:

if(!$this->getUser()->hasParameter('referer'))
{
  $this->getUser()->setParameter('referer',$this->getRequest()->getReferer());
}

et lorsque la connexion réussit, rediriger l'utilisateur à referer stockée avec:

$this->redirect($this->getUser()->getParameter('referer'));

Vous avez exemple complet dans sfGuardPlugin:

http://www.symfony-project.org/plugins/sfGuardPlugin

Autres conseils

Plus simplement ...

$this->getUser()->setReferer($this->getRequest()->getReferer());

comme

setReferer($referer)
{
  if (!$this->hasAttribute('referer'))
    $this->setAttribute('referer', $referer);
}

Un problème lié, mais au lieu d'essayer de réaliser l'avant d'une autre action:

Si vous avez une action protégée par sfGuard qui tente de rediriger vers le referrer, vous obtiendrez une boucle de redirection après connexion. En effet, la page de connexion de sfGuard wil devenir le referrer. Un paramètre ou un attribut peuvent être sauvegardés sur plusieurs demandes si stockées dans l'action de connexion comme ci-dessus, ce qui signifie l'action peut être redirigé vers une page incorrecte si elle est déjà signé. La solution est d'utiliser un flash qui sera oublié. Ceci peut être accompli avec le code suivant dans la méthode executeSignin de sfGuardAuthActions:

if ($this->getUser()->hasFlash('referer'))
{
  $this->getUser()->setFlash('referer', $this->getUser()->getFlash('referer'));
}
else
{   
  $this->getUser()->setFlash('referer', $this->getRequest()->getReferer());
}

En redéfinissant le flash dans le premier bloc, il ne sera pas oublié entre les tentatives de connexion, et en utilisant un flash, connectez-vous d'autres pages ne peuvent pas interférer avec votre action.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top