Domanda

Con la sicurezza di azione di Symfony se un utente non è stato identificato che sarà trasmessa al l'azione di login di default come definito nel file di applicazioni settings.yml. Come faccio a rimandare l'utente all'azione originariamente richiesto dopo che l'utente viene autenticato?

È stato utile?

Soluzione

Il primo colpo alla vostra azione di login, negozio referer alla sessione utente:

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

e poi quando login riesce, reindirizzare all'utente di referer archiviati con:

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

Hai esempio completo in sfGuardPlugin:

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

Altri suggerimenti

Più semplicemente ...

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

come

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

Un problema correlato, ma invece cercare di eseguire l'avanti da un'azione diversa:

Se si dispone di un'azione protetto da sfGuard, che sta tentando di reindirizzare il referrer, si otterrà un loop di reindirizzamento dopo l'accesso. Questo perché la pagina di accesso di sfGuard wil diventare il referrer. Un parametro o un attributo possono essere salvati su più richieste se conservato nell'azione di accesso di cui sopra, il che significa l'azione potrebbe essere il reindirizzamento ad una pagina non corretta se già firmato. La soluzione è quella di utilizzare un flash che sarà dimenticato. Questo può essere realizzato con il seguente codice nel metodo executeSignin di sfGuardAuthActions:

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

Azzerando il lampo nel primo blocco, non sarà dimenticato tra i tentativi di accesso, e utilizzando un flash, l'accesso da altre pagine non può interferire con la vostra azione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top