web-dev-qa-db-fra.com

Vous devez configurer le chemin de vérification pour qu'il soit géré par le pare-feu à l'aide de formulaire_login dans la configuration de votre pare-feu de sécurité.

j'ai WebService qui est fournisseur pour mes utilisateurs "réguliers". Je souhaite utiliser FosUserBundle pour mes administrateurs. Ci-dessus, ma configuration de sécurité. La connexion des utilisateurs réguliers fonctionne sans problème, mais lorsque je souhaite me connecter en tant qu'administrateur, j'ai le message suivant:

"Vous devez configurer le chemin de vérification pour qu'il soit géré par le pare-feu à l'aide de form_login dans la configuration de votre pare-feu de sécurité."

Voici ma configuration de sécurité:

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
11
Antonio Peric

Je pense que vous devez mettre form_login sous un pare-feu (soit main, soit en ajouter un autre)

form_login sous le pare-feu principal:

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 sous un autre pare-feu

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 .....
8
zizoujab

Votre code est erroné uniquement dans la partie de la valeur check_path.

Ceci est votre code original:

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

Et vous devriez utiliser quelque chose comme:

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

Remarque que check_path a pour valeur uniquement une chaîne. Si vous utilisez la valeur fos_user_security_check, vous appelez la classe SecurityController.php et appelez la méthode checkAction () qui ne renvoie exactement qu'une exception RuntimeError avec l'erreur affichée "Vous devez configurer le chemin de vérification pour qu'il soit géré par le pare-feu à l'aide de formulaire_login dans la configuration de votre pare-feu de sécurité. ". Donc, le correctif est si simple que vous n'utilisez pas la valeur fos_user_security_check

3
shakaran

pattern: ^/admin

C’est peut-être là que commencent vos problèmes.

Essayez de changer ceci en ^ /

Puis changez vos itinéraires pour 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
1
Henry

Dans certains cas, je peux voir que cela est causé par les paramètres de sécurité par défaut générés lorsque symfony est installé par composer.

Dans mon cas, dans mon security.yml, j'avais cette section:

default:
    anonymous: ~

Comme cela fonctionnait comme une fourre-tout, cela interférait avec la capacité de FOSUserBundle à gérer la route. Supprimez-le simplement ou, si vous avez spécifié un itinéraire, assurez-vous qu'il ne gère pas le même chemin d'URL.

1
LovelyHelper