Question

Je dois désactiver la redirection après vérification de connexion, parce que je dois obtenir seulement que la connexion a été le succès ou non. Après la soumission / url login_check me donner les bonnes données, mais gardez à rediriger / login (en cas d'échec).
/ Login est vide après.
Je suis en train de mettre en place sous forme de connexion à l'aide ExtJS 4, alors je dois valider creux une demande de poste ajax. login_check devrait authentifier, créer session utilisateur et le retour si elle était succès ou l'échec, mais pas partout de transfert.

mes regards login.html.twig comme:

{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
    { success:true }
{% else %}
    { success: false }
{% endif %}

et security.yml:

firewalls:
    main:
        form_login:
            provider: fos_userbundle
            failure_path:  null
            failure_forward: false
Était-ce utile?

La solution

Créer un gestionnaire d'authentification:

namespace YourVendor\UserBundle\Handler;

// "use" statements here

class AuthenticationHandler
implements AuthenticationSuccessHandlerInterface,
           AuthenticationFailureHandlerInterface
{
    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        if ($request->isXmlHttpRequest()) {
            $result = array('success' => true);
            return new Response(json_encode($result));
        } else {
            // Handle non XmlHttp request here
        }
    }

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {
        if ($request->isXmlHttpRequest()) {
            $result = array('success' => false);
            return new Response(json_encode($result));
        } else {
            // Handle non XmlHttp request here
        }
    }
}

Enregistrer le gestionnaire en tant que service:

services:
    authentication_handler:
        class: YourVendor\UserBundle\Handler\AuthenticationHandler

Enregistrez le service dans le pare-feu:

firewalls:
    main:
        form_login:
            success_handler: authentication_handler
            failure_handler: authentication_handler

Ceci est un exemple difficile pour vous donner l'idée générale - vous aurez besoin de comprendre les détails par vous-même. Si vous êtes coincé et ont besoin d'éclaircissements supplémentaires, poser vos questions dans les commentaires et je vais essayer d'élaborer l'exemple.

Autres conseils

Le flux de symfony normale est de vous rediriger vers une page de connexion si vous n'êtes pas connecté, ce qui fonctionne très bien pour l'homme. Mais vous semble être à la recherche d'une solution programmatique.

Avez-vous essayé d'installer _target_path dans votre forme, de déclarer ce que la « page suivante » devrait être? Symfony va toujours de vous transmettre quelque part, mais vous pouvez définir que quelque part où vous voulez.

J'ai trouvé ces deux pages utiles pour décrire le fonctionnement interne du formulaire de connexion:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top