2008-12-11 8 views

Répondre

8

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()); 
} 

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

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

Vous avez exemple complet en sfGuardPlugin:

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

1

Plus simplement ...

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

comme

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

J'ai rencontré des problèmes lors de l'utilisation de l'attribut avec le nom 'referer'. L'utilisation d'un nom différent a résolu le problème. – Druckles

0

Un problème connexe, 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 est Si vous tentez de rediriger vers le référent, vous obtiendrez une boucle de redirection après vous être connecté. En effet, la page de connexion de sfGuard deviendra le référent. Un paramètre ou un attribut peut être sauvegardé sur plusieurs requêtes s'il est stocké dans l'action de connexion comme ci-dessus, ce qui signifie que l'action redirige vers une page incorrecte si elle est déjà connectée. 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ée entre les tentatives de connexion, et en utilisant un flash, connectez-vous à partir de les autres pages ne peuvent pas interférer avec votre action.

Questions connexes