web-dev-qa-db-fra.com

Comment fonctionne la route de connexion check_path sans contrôleur / action par défaut?

Je travaille sur un projet symfony 2.3 ayant le code de routage suivant

just2_frontend_logincheck:
    pattern:   /login_check

Il n'a pas

defaults:{ _controller: testBundle:User:login }

Mais ça marche. Mais je ne sais pas comment fonctionne le routage. C'est possible? Veuillez me conseiller sur le routage.

28
saravanan

Le check_path route/chemin est utilisé par votre pare-feu pour intercepter les demandes de connexion.

L'action de cette route n'est jamais vraiment accessible. Il s'agit de l'itinéraire/URL vers lequel votre formulaire de connexion est publié et la demande doit être traitée par le service fournisseur de votre pare-feu.

Si l'action de la route check_path Est en cours d'exécution, il y a un problème avec le pare-feu (la demande n'est pas traitée par votre pare-feu).

Comme vous pouvez le voir ici check_path de FOSUserBundle est routé vers SecurityController::checkAction Et lance simplement un RuntimeException.

La configuration de check_path se trouve dans app/config/security.yml Sous security.firewalls.<firewallname>.form_login.check_path.

Il peut s'agir d'un modèle comme /login_check Ou, comme dans votre cas, d'un nom de route, c'est-à-dire just2_frontend_logincheck, Mais il n'y a aucune action sous-jacente.

security:
    providers:
         your_provider_name: your_provider_service  # authentication provider
         # ...

    firewalls:                                 # Required
        your_firewall_name:
            # ...

            provider: your_provider_name
            form_login:              
                check_path: /login_check       # submit the login form here
                                               # in your case a route name:
                                               # just2_frontend_logincheck

Sous le capot, symfony appelle la méthode authenticate() du service your_provider_service Pour vérifier les informations d'identification fournies.

Vous pouvez trouver la classe utilisée comme fournisseur de services en utilisant:

app/console debug:container --show-private your_provider_service 
46
Nicolai Fröhlich