2015-06-06 14 views
5

Ho seguito this tutorial da Symfony Book per gestire i miei utenti.Visualizza messaggi flash dopo l'accesso/uscita

Ora, desidero impostare un messaggio flash dopo che l'accesso è riuscito OPPURE se qualcuno tenta di accedere ad un'area vietata.

Quello che ho capito è che l'autenticazione e l'autorizzazione non sono gestite all'interno dei controller. Di conseguenza, non so dove inserire il mio codice per visualizzare un semplice messaggio "Mi dispiace, non sei connesso".

risposta

2

Ci vorrà un po 'di tempo e qualche codice solo per visualizzare un messaggio semplice. Se si vuole fare in via Symfony si dovrebbe guardare la configurazione di sicurezza this prima, specialmente questi:

  1. entry_point (sotto firewall) - che reindirizza solito gli utenti alla pagina di login ogni volta che tentano di accedere alle pagine protette. Qui puoi impostare i messaggi flash.
  2. success_handler sotto form_login (se si sta usando) per mostrare il vostro messaggio di login di successo
  3. success_handler sotto logout per mostrare il vostro messaggio di logout

Alcune referenze:

+0

Grazie molto. Penso che userò il metodo 'success_handler'. Ora sto pensando di creare un nuovo servizio denominato FlashMessages che gestirà la maggior parte dei messaggi flash utilizzati nella mia applicazione. Ma per ora mi sto sforzando di creare e registrare quel servizio. – Creasixtine

+1

@LeBarde È molto semplice creare e utilizzare i servizi. Leggi di loro [qui] (http://symfony.com/doc/current/book/service_container.html). – xurshid29

+0

Grazie @ xurshid29 per la tua risposta. Ora ho i miei servizi. Ora ho un servizio 'LoginSuccessHandler'. Ma qui '$ request-> getUser()' è 'null' all'interno del metodo' onAuthenticationSuccess() '. Non riesco a capire perché. Continuando a cercare ... – Creasixtine

2

Puoi accedere allo SecurityContext dal tuo Controller. Quindi, supponendo che lo zona proibita richiedono un ruolo SOME_ROLE, si può fare qualcosa di simile:

if (!$this->get('security.context')->isGranted('SOME_ROLE')) { 
    $this->get('session')->getFlashBag()->add('error', 'Access forbidden'); 
    // maybe return a RedirectResponse to another page the user can access... 
} 

Si noti che il SecurityContext è stata deprecata dal Symfony 2.6. Funzionerà ancora, ma se vuoi imparare come adattarti alle versioni future, puoi controllare this.

Per quanto riguarda i messaggi quando gli utenti sono/non sono connessi, è possibile utilizzare il AuthorizationChecker, molto simile alla precedente:

if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) { 
    // Add flash message here... 
} 

È possibile trovare maggiori informazioni here.

Problemi correlati