2011-11-29 18 views
29

Devo disabilitare il reindirizzamento dopo il controllo dell'accesso, perché devo ottenere solo che l'accesso sia riuscito o meno. Dopo l'invio/login_check url dammi i dati giusti, ma continua a reindirizzare a/login (in caso di fallimento).
/login è vuoto dopo.
Sto provando ad impostare il modulo di login usando extjs 4 quindi devo convalidare tramite una richiesta di posta ajax. login_check dovrebbe autenticarsi, creare una sessione utente e restituire se si trattava di successo o fallimento, ma nessun inoltro da nessuna parte.Come disabilitare il reindirizzamento dopo il login_check in Symfony 2

mia login.html.twig assomiglia:

{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %} 
    { success:true } 
{% else %} 
    { success: false } 
{% endif %} 

e in security.yml:

firewalls: 
    main: 
     form_login: 
      provider: fos_userbundle 
      failure_path: null 
      failure_forward: false 
+1

Può chiarire il vostro caso d'uso, ad esempio, solo un po 'di background su come questo si adatta alla tua applicazione? – richsage

+0

Sto provando ad impostare l'accesso usando extjs 4. Ottengo il modulo da inviare a symfony per il controllo tramite posta ajax, ma dopo controllare un app di richiesta GET per la pagina di login, e potrebbe essere ok se non fosse vuoto, quindi js continua ad aspettare per ottenere dati che possono essere elaborati. – user1063963

risposta

60

creare un gestore di autenticazione:

namespace YourVendor\UserBundle\Handler; 

// "use" statements here 

class AuthenticationHandler 
implements AuthenticationSuccessHandlerInterface, 
      AuthenticationFailureHandlerInterface 
{ 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     if ($request->isXmlHttpRequest()) { 
      $result = array('success' => true); 
      return new Response(json_encode($result)); 
     } else { 
      // Handle non XmlHttp request here 
     } 
    } 

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    { 
     if ($request->isXmlHttpRequest()) { 
      $result = array('success' => false); 
      return new Response(json_encode($result)); 
     } else { 
      // Handle non XmlHttp request here 
     } 
    } 
} 

Registrare il gestore come un servizio:

services: 
    authentication_handler: 
     class: YourVendor\UserBundle\Handler\AuthenticationHandler 

registrare il servizio nel firewall:

firewalls: 
    main: 
     form_login: 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 

Questo è un esempio di massima per darvi l'idea generale - è necessario capire i dettagli da soli. Se sei bloccato e hai bisogno di ulteriori chiarimenti, metti le tue domande nei commenti e cercherò di elaborare l'esempio.

+0

le opzioni success_handler e failure_handler potrebbero essere matrici? cosa succede se ho bisogno di installare alcuni bundle e come parte della sua configurazione ho bisogno di registro success_handler e failure_handler fornito da bundle. ma sono già registrati con i miei stessi gestori. come registrare più di un gestore? –

1

Il normale flusso di symfony è quello di reindirizzare a una pagina di accesso se non si è connessi, che funziona bene per gli esseri umani. Ma sembra che tu stia cercando una soluzione programmatica.

Hai provato a impostare _target_path nel modulo, per dichiarare quale dovrebbe essere la "pagina successiva"? Symfony ti inoltra sempre da qualche parte, ma puoi impostarlo da qualche parte dove vuoi.

Ho trovato queste due pagine utile per descrivere il funzionamento interno del modulo di login:

Problemi correlati