Leiten Sie Symfony2 LogoutSuccessHandler zum ursprünglichen Abmeldeziel um

8

Ich muss mein Benutzerobjekt beim Abmelden ändern. Um dies zu tun, habe ich eine security.yml, die unter anderem Folgendes enthält:

%Vor%

... definiert einen Logout-Success-Handler, der in services.yml wie folgt definiert ist -

%Vor%

... schließlich ist das Geschäftsende meines Handlers so -

%Vor%

Also, wo steht "was nun?" Ich verstehe, dass ich ein Response-Objekt zurückgeben muss. Im Idealfall möchte ich, dass das Antwortobjekt den Benutzer an das weiterleitet, was in logout.target in security.yml definiert ist.

Gibt es einen einfachen Weg, den ich abfragen kann? Oder, noch besser, gibt es eine andere Möglichkeit, solche Dinge zu tun, die mich nicht dazu zwingen, überhaupt mit den Request / Response-Objekten zu interagieren?

Danke

    
Jez 17.02.2014, 17:27
quelle

3 Antworten

5

Also, ich denke, ich habe die richtige Antwort gefunden -

Anstatt LogoutSuccessHandlerInterface zu implementieren und logout.success_handler zu konfigurieren, sieht meine security.yml jetzt so aus -

%Vor%

... und ich implementiere Symfony\Component\Security\Http\Logout\LogoutHandlerInterface . Verwirrende Benennung, aber dies scheint die bevorzugte Möglichkeit zu sein, Post-Logout-Operationen durchzuführen, ohne sich mit dem Antwortobjekt befassen zu müssen. Meine Implementierung sieht so aus -

%Vor%

... wie Sie sehen können, bietet LogoutHandlerInterface ein vorgefertigtes $response -Objekt, das ich einfach zurückgeben kann, wenn ich fertig bin.

    
Jez 18.02.2014, 09:29
quelle
8

Sie könnten Ihr Ziel als Parameter in Ihrem parameters.yml oder config.yml definieren:

%Vor%

Und dann referenziere diesen Wert in deinem security.yml :

%Vor%

Und / oder injizieren Sie es in Ihren Logout-Handler:

%Vor%

Und geben Sie RedirectResponse mit diesem Wert zurück:

%Vor%     
Leif 17.02.2014 17:41
quelle
6

Sie könnten die Komposition verwenden und den Standard LogoutSuccessHandler in Ihr Objekt einfügen und die Methode onLogoutSucces dafür aufrufen.

Der folgende Pseudocode zeigt die Idee, es zu tun.

%Vor%

Dies ist auch die Art, wie HttpKernelInterface in StackPHP funktioniert und wenn Sie HttpCache in Ihrer Anwendung verwenden.

Hoffentlich hilft das, fröhliche Codierung:)

    
Henrik Bjørnskov 18.02.2014 08:57
quelle

Tags und Links