2013-06-01 13 views
10

Ho un servizio Web che è il provider per i miei utenti "regolari". Voglio usare FosUserBundle per i miei amministratori. Sopra è la mia configurazione di sicurezza. gli utenti regolari login opere senza alcun problema, ma quando voglio il login come amministratore ho ricevuto questo messaggio: "È necessario configurare il percorso di controllo per essere gestita dal firewall utilizzando form_login nella configurazione del firewall di sicurezza"È necessario configurare il percorso di controllo che deve essere gestito dal firewall utilizzando form_login nella configurazione del firewall di sicurezza

Qui è la mia configurazione di sicurezza:

security: 
encoders: 
    Locastic\CustomUserBundle\Security\User\User: plaintext 
    FOS\UserBundle\Model\UserInterface: sha512 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username_email 
    webservice: 
     id: locastic.user_provider 

firewalls:    
    main: 
     pattern: ^/admin 
    form_login: 
     provider:    fos_userbundle 
     login_path:    fos_user_security_login 
     check_path:    fos_user_security_check 
     csrf_provider:   form.csrf_provider 
     logout:  true 
     anonymous: true 
     remember_me: 
      key:  "%secret%" 
      lifetime: 31536000 # 365 days in seconds 
      path: /
      domain: ~ # Defaults to the current domain from $_SERVER 
    user-service: 
     pattern: ^/ 
     logout:  
      path: /logout 
     anonymous: true 
     webservice-login: 
      check_path: /prijava-provjera 
      login_path: /prijavi-se 
      provider: webservice 
      always_use_default_target_path: true 
      default_target_path: /stanje-racuna 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, role: ROLE_ADMIN } 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 
+0

Si prega di non inserire le informazioni tag nel titolo.Il sistema di tagging qui è molto bravo a classificare le cose e non ha bisogno di aiuto. :-) Si prega di vedere [Le domande dovrebbero includere "tag" nei loro titoli?] (Http://meta.stackexchange.com/q/19190/172661). Grazie. –

risposta

7

penso che è necessario mettere form_login sotto un firewall (sia main o aggiungere un altro)

form_login sotto fi principale rewall:

firewalls:    
main: 
    pattern: ^/admin 
    form_login: 
     provider:    fos_userbundle 
     login_path:    fos_user_security_login 
     check_path:    fos_user_security_check 
     csrf_provider:   form.csrf_provider 
     logout:  true 
     anonymous: true .... 

form_login sotto un altro firewall

firewalls:    
    main: 
     pattern: ^/admin 
    second_firewall: 
     pattern: ^/ 
     form_login: 
      provider:    fos_userbundle 
      login_path:    fos_user_security_login 
      check_path:    fos_user_security_check 
      csrf_provider:   form.csrf_provider 
      logout:  true 
      anonymous: true ..... 
+0

Mi è piaciuto come hai detto ma ancora lo stesso errore :( –

+0

Informazioni complementari sono disponibili all'indirizzo http://stackoverflow.com/questions/17406446/how-does-the-login-check-path-route-work-without-default -controller-action –

+0

Come configurare Fosuserbundle per utilizzare due firewall? Ho seguito i passaggi che ho avuto lo stesso errore. –

1

pattern: ^/admin

Questa è forse dove iniziano i vostri problemi.

Prova a cambiare questo torna a ^/

Quindi modificare i percorsi per FosUserBundle

# app/config/routing.yml 

fos_user_security: 
    resource: "@FOSUserBundle/Resources/config/routing/security.xml" 
    prefix: /admin 

fos_user_profile: 
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml" 
    prefix: /admin/profile 

fos_user_register: 
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml" 
    prefix: /admin/register 

fos_user_resetting: 
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" 
    prefix: /admin/resetting 

fos_user_change_password: 
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" 
    prefix: /admin/profile 
+0

controlla la risposta precedente, dovrai correggere anche questo indentazione: – Henry

1

In alcuni casi, posso vedere che questo è causato da impostazioni di sicurezza predefinite generate quando symfony è installato dal compositore .

Nel mio caso, nel mio security.yml, ho avuto questa sezione:

default: 
    anonymous: ~ 

Dato che questo stava lavorando come catch-all, che stava interferendo con la capacità di FOSUserBundle di gestire il percorso. Basta cancellarlo o, se hai un percorso che hai specificato tu stesso, assicurati che non stia gestendo lo stesso percorso URL.

+0

Sì, lo stesso problema qui! FOSUserBundle non funziona con questa sezione abilitata. –

1

Il codice è errato solo nella parte del valore check_path.

Questo è il tuo codice originale:

firewalls:    
    main: 
     pattern: ^/admin 
     form_login: 
      provider:    fos_userbundle 
      login_path:    fos_user_security_login 
      check_path:    fos_user_security_check 
      csrf_provider:   form.csrf_provider 
      logout:  true 
      anonymous: true 

e si dovrebbe usare qualcosa come:

firewalls:    
    main: 
     pattern: ^/admin 
     form_login: 
      provider:    fos_userbundle 
      login_path:    fos_user_security_login 
      check_path:    /login_check 
      csrf_provider:   form.csrf_provider 
      logout:  true 
      anonymous: true 

Nota che check_path ha come valore solo una stringa. Se si utilizza il valore fos_user_security_check si sta chiamando alla classe SecurityController.php e si richiama il metodo checkAction() che genera solo un'eccezione RuntimeError con l'errore visualizzato "È necessario configurare il percorso di controllo che deve essere gestito dal firewall utilizzando form_login nel firewall di sicurezza configurazione ". Quindi la correzione è così semplice che non utilizzare il valore fos_user_security_check