2013-04-09 5 views
11

Sto cercando da un po 'di tempo, per qualsiasi informazione, su come fare qualcosa dopo il successo dell'autenticazione in symfony2. Voglio riutilizzare la password utente per utilizzare bcrypt subito dopo l'autenticazione con successo utilizzando il vecchio hash. Devo farlo quando ho ancora una password semplice valida, quindi dovrebbe essere subito dopo il controllo delle credenziali e prima del reindirizzamento.Esegui qualcosa solo dopo il successo di accesso a symfony2 e prima del reindirizzamento?

Eventuali indizi su come raggiungerlo?

Ho trovato qualcosa sul dispatcher di eventi in Symfony ma io non riesco a trovare se c'è qualche evento dopo l'autenticazione riuscita.

Per favore correggimi se sto cercando di fare questo modo sbagliato e suggerire un approccio migliore.

// EDIT

Ok ho trovato evento licenziato subito dopo il successo di autenticazione, si chiama security.authentication.success. Quindi ora posso allegare a questo evento ma ora non sono sicuro di dove nel mio codice boundle dovrei collegare il mio listener di eventi? Dovrei farlo nel mio /src/Pkr/BlogUserBundle/DependencyInjection/PkrBlogUserExtension.php nel metodo load()?

risposta

28

È possibile specificare un gestore di successo di accesso da eseguire all'accesso riuscito.

Ad esempio, il security.yml

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      success_handler: my.security.login_handler 

Creare ora la classe che implementa Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface e l'accesso, si può fare quello che ti serve e gestire il reindirizzamento, come si vede in forma.

/** 
* 
*/ 
public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
{ 
    // handle it and return a response 
} 

Quindi creare un servizio con lo stesso nome nella tua services.xml per il vostro pacco, o nella vostra config.yml utilizzando il gestore appena creato.

All'inizio ho scoperto come fare questo seguendo questo tutorial:

http://www.reecefowell.com/2011/10/26/redirecting-on-loginlogout-in-symfony2-using-loginhandlers/

+0

Grande, ci proverò a breve :) – piotrekkr

+0

La soluzione funziona alla grande. All'inizio ho provato con l'ascoltatore di eventi collegato all'evento di accesso di accesso ma poi non avevo l'oggetto richiesta così facilmente accessibile come nella soluzione :) Grazie per l'aiuto – piotrekkr

+0

Quando ho provato questo ho trovato $ request-> headers-> get ('referer') è stato impostato sulla mia pagina di accesso. Qualche idea su come ottenere la pagina richiesta * prima * l'utente è stato reindirizzato alla pagina di accesso? – adavea