So deaktivieren Sie die Umleitung nach Login_Check in Symfony 2
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
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:
- So passen Sie Ihr Formular Login an (Suche nach _target_path)
- Sicherheitsseite im Handbuch