Frage

Ich muss die Umleitung nach der Anmeldeprüfung deaktivieren, da ich nur den Anmeldung erlangen muss oder nicht. Nach Einreichung /Login_Check -URL geben Sie mir die richtigen Daten, aber ständig zu /login (beim Fehler) umgeleitet.
/Login ist danach leer.
Ich versuche, Anmeldeformular mit ExtJS 4 einzurichten, daher muss ich durch eine Ajax -Postanforderung validieren. login_check sollte authentifizieren, Benutzersitzungen erstellen und zurückgeben, ob es Erfolg oder Misserfolg war, aber nirgendwo weiterleitet.

Mein Login.html.twig sieht aus wie:

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

und in Security.yml:

firewalls:
    main:
        form_login:
            provider: fos_userbundle
            failure_path:  null
            failure_forward: false
War es hilfreich?

Lösung

Erstellen Sie einen Authentifizierungshandler:

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

Registrieren Sie den Handler als Service:

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

Registrieren Sie den Dienst in der Firewall:

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

Dies ist ein grobes Beispiel, um Ihnen die allgemeine Idee zu geben - Sie müssen die Details selbst herausfinden. Wenn Sie festsitzen und weitere Klarstellungen benötigen, stellen Sie Ihre Fragen in die Kommentare ein und ich werde versuchen, das Beispiel auszuarbeiten.

Andere Tipps

Der normale Symfony -Fluss besteht darin, Sie auf eine Anmeldeseite umzuleiten, wenn Sie nicht angemeldet sind, was für den Menschen gut funktioniert. Aber Sie scheinen nach einer programmatischen Lösung zu suchen.

Haben Sie versucht, _target_path in Ihrem Formular festzulegen, um zu erklären, was die "nächste Seite" sein sollte? Symfony wird Sie immer irgendwo weiterleiten, aber Sie können das irgendwohin setzen, wo Sie wollen.

Ich fand diese beiden Seiten nützlich, um das Innenleben des Anmeldeformulars zu beschreiben:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top