Erstellen Sie manuell einen symfony2 memoke Cookie (FOSUserBundle)

8

Könnte jemand erklären, wie Sie manuell ein Erinnerungs-Cookie in einem Controller erstellen können?

Ich möchte, dass die Benutzer angemeldet bleiben, nachdem sie die "Registrierung" gedrückt haben. Button, ohne sich später mit ihren Zugangsdaten einloggen zu müssen.

Ich habe versucht, ein Cookie manuell zu erstellen, aber ich rate den Cookie Der Wert ist falsch und daher die Funktion "An mich erinnern" funktioniert nicht. Ein Cookie mit dem richtigen Namen wird gesetzt. Ich habe das überprüft.

Die Erinnerungsfunktion funktioniert wie erwartet, wenn Sie den normalen Modus verwenden Login-Prozedur mit den Anmeldeinformationen des Benutzers.

security.yml security.yml erinnere mich an mich

%Vor%

Das habe ich jetzt, obwohl der Cookie gesetzt ist, funktioniert es nicht.

%Vor%

Aktualisierung:

Ich habe auch versucht mit der Arbeit zu arbeiten PersistentTokenBasedRememberMeServices Klasse mit Reflektion, aber es funktioniert nicht. ein Cookie wird gesetzt, aber es funktioniert nicht

%Vor%

Ich verwende Symfony v2.0.5 und FOSUserBundle 1.0

UPDATE 2:

Ich habe einen 3. Weg ausprobiert. Das gleiche wie oben, aber ohne Überlegung:

%Vor%     
Jonas Wouters 22.01.2012, 18:27
quelle

4 Antworten

10

Wenn Sie den rememberme-Cookie direkt setzen, müssen Sie das folgende Format verwenden:

%Vor%

wo der Hash sein wird:

%Vor%

Der Schlüssel ist der Schlüssel, den Sie in Ihrer Sicherheit (.xml / .yml) im Abschnitt remember_me eingegeben haben.

Dies wird von processAutoLoginCookie() method in der Symfony / Component / Sicherheit / Http / RememberMe / TokenBasedRememberMeService.php Datei übernommen.

Dies alles geschieht durch die Methode generateCookieValue() in derselben Klasse.

Ich würde jedoch nicht empfehlen, dies direkt zu tun, sondern versuchen zu sehen, ob Sie die TokenBasedRememberMeService::onLoginSuccess() -Methode aufrufen können, die diesen Cookie für Sie setzt, um den Code robuster und portabler zu machen.

    
JayTaph 30.01.2012, 18:48
quelle
13

Hier ist, wie ich es gemacht habe. Ich verwende nicht den FOSUserBundle und ich benutze Doctrine Entity User Provider, aber es sollte trivial sein, sich an Ihre Bedürfnisse anzupassen. Hier ist eine allgemeine Lösung:

%Vor%

Denken Sie daran, dass Sie always_remember_me option auf true setzen müssen (wie im obigen Code) oder irgendwie in Ihren $ _POST-Parametern, sonst gibt die Methode isRememberMeRequested von AbstractRememberMeServices false und den Cookie zurück wird nicht gespeichert.

Sie waren jedoch ziemlich nah an der richtigen Lösung :) Was Sie falsch gemacht haben (im dritten Versuch) ist, dass Sie die Reihenfolge der Parameter hier geändert haben:

%Vor%

Schauen Sie sich __construct() in AbstractRememberMeServices.php an. Du solltest ein $securityKey als zweites Argument und $providerKey als drittes Argument übergeben, nicht umgekehrt wie du es versehentlich getan hast;)

Was ich noch nicht weiß, ist, wie man Parameter von security.yml direkt im Controller bekommt, um sie nicht zu duplizieren. Mit $this->container->getParameter() kann ich die Parameter unter parameters key in config.yml ablegen, aber nicht die höher im Konfigurationsbaum. Irgendwelche Gedanken dazu?

    
grzechoo 30.01.2012 20:13
quelle
0

Für mich war die einfachste Lösung, ein BaseTokenBasedRememberMeServices zu erweitern und es mit

umgehen zu lassen %Vor%

und im Controller;

%Vor%

Dann setze das Cookie auf $ remember_me_cookie

Ich hoffe, es funktioniert mit dir 2.

    
Giray Kefelioglu 13.01.2017 18:02
quelle
0

Ich hatte das gleiche Problem, als ich versuchte, REMEMBERME-Cookie nach einer Verbindung mit Token einen Benutzer zu setzen, indem ich Guard-Authentifizierung verwendete .

In dieser Situation hatte ich kein Response-Objekt, um $ response- & gt; headers- & gt; setCookie () verwenden zu können, und muss Setcookie (). Und in diesem Fall erstellen Sie eine RedirectResponse ist nicht geeignet.

Dies muss refaktorisiert werden, aber ich poste das rohe Verfahren, auf dem ich meinen Service aufbaute

%Vor%     
fbaudet 30.03.2017 10:48
quelle