2012-03-22 16 views
5

Utilizzo il FOSUserBundle e richiede la possibilità di accedere da 2 percorsi diversi (o più). Questi percorsi avranno modelli diversi e anche accesso a diverse aree. L'unica cosa che differisce tra gli accessi è l'autorizzazione richiesta. I percorsi sarà qualcosa sulla falsariga diSymfony2 - FOSUserBundle - Posizioni multiple di login

site.com/login

site.com/admin/login

e anche possibile site.com/ajax_login

Sono stato in grado di capire come ottenere diversi template da eseguire rippando tutto tranne il token CSRF dal FOSUserBundle login.html.twig (che è sovrascritto), quindi creando percorsi che visualizzano le proprie caselle di login e anche la rotta di login (in modo che solo il token CSRF viene reso). Questo non funziona per admin/login come il modulo invia di nuovo al login e se fallisce visualizza invece quella pagina.

C'è un modo semplice per raggiungere questo obiettivo?

+0

Stai parlando di firewall diversi forse? – tamir

+0

Come hai fatto a utilizzare il modulo di accesso in più modelli? – httpete

risposta

0

Potresti pubblicare il tuo modello?

Hai modificato il percorso correttamente nel modello?

<form action="{{ path('form_submit') }}" method="post" {{ form_enctype(form) }}> 

Si desidera inviare il modulo al controller corretto.

1

Qui è quello che alla fine è venuta, in fondo entrambi utilizzare lo stesso firewall e condividono lo stesso contesto in modo da quando faccio il login tramite il login normale ottengono anche accesso al admin (ammesso che sono admin)

firewalls: 
    admin: 
     context:   site 
     switch_user:  true 
     pattern:   /admin(.*) 
     form_login: 
      provider:  fos_userbundle 
      login_path:  /admin/login 
      success_handler: admin_authentication_handler 
      use_forward: false 
      check_path:  /admin/login_check 
      failure_path: null 
      use_referer: true 
      always_use_default_target_path: true 
      default_target_path: /admin/ 
     logout: 
      path:   /admin/logout 
      target:   /admin/login 
     anonymous: true 
    public: 
     pattern: ^/ 
     context:   site 
     form_login: 
      login_path:  /login 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 
      provider: fos_userbundle 
     anonymous: true 
     logout: true 

Ovviamente se è necessario creare una casella di login AJAX, è necessario sovrascrivere i gestori di successo e di errore e verificare se la richiesta è una XmlHttpRequest e restituire il risultato del login.

2

Sono stato bloccato con la stessa domanda per un po 'e poi ho creato una soluzione per conto mio. Sapevo che doveva esserci una soluzione semplice ...

Ho inviato una richiesta di pull che consente di creare nuovi modelli di accesso più facilmente. Controlla la richiesta di pull qui: https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1186.

C'è anche un altro modo abbastanza semplice come raggiungere questo obiettivo. Estendere SecurityController e cambiare renderLogin metodo con i seguenti contenuti

protected function renderLogin(array $data, $template) 
{ 
    return $this->container->get('templating')->renderResponse('YourBundle:Security:login.html.twig'); 
} 

Quindi creare un percorso per il controller di nuova creazione:

admin.login: 
    pattern: /admin/login 
    defaults: { _controller: YourBundle:Security:login } 

Dopo questo solo quello che dovete fare è quello di modificare la vostra configurazione di sicurezza di conseguenza. Cambia il tuo form_login login_path in/admin/login e sei a posto.

+0

la richiesta pull ha errori e quindi non è ancora unita al FOSUserBundle. Hai un aggiornamento? – Mondane

Problemi correlati