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