Devise: rememberable bedeutet, dass last_sign_in_at nicht von trackable aktualisiert wird

8

Ich verwende Devise und verlasse mich auf last_sign_in_at des Benutzermodells, um herauszufinden, ob meine Kunden nicht innerhalb von X Tagen zurückgekehrt sind. Ich habe jedoch kürzlich festgestellt, dass last_sign_in_at nur aktualisiert wird, wenn ein tatsächliches Anmeldeformular eintritt, im Gegensatz dazu, wenn ein Benutzer aufgrund der Aufnahme von rememberable automatisch angemeldet wird.

Wenn Sie sicherstellen möchten, dass "last_sign_in_at" jedes Mal aktualisiert wird, wenn sich ein Benutzer anmeldet (eine neue Browsersitzung), unabhängig davon, ob er sich mit einem Formular anmeldet oder automatisch vom Erinnerungscookie angemeldet wird, wie würde ich vorgehen? dies in einer Devise-kompatiblen Weise?

    
Matthew O'Riordan 09.01.2012, 13:06
quelle

4 Antworten

5

Der verfolgbare Hook ist von Wardens after_set_user Hook - what Sie könnten tun, um dies leicht zu beheben, ist ein vor_filter zu rufen sign_in .

Dies könnte optimiert werden, aber testen Sie, ob Sie

verwenden %Vor%

aktualisiert den Zeitstempel last_signed_in_at.

    
RobH 09.01.2012, 20:12
quelle
13

Ich nehme Matthäus Lösung, ich denke, der Code sollte der folgende sein (beachten Sie den Nicht-Operator vor der Sitzung [: logged_signin]):

%Vor%     
Kitto 18.08.2012 19:23
quelle
2

Devise: Erinnerungsfähig bedeutet, dass last_sign_in_at nicht durch verfolgbar aktualisiert wird

Bei früheren Lösungen besteht das Problem darin, dass sich der Benutzer bei einer normalen Anmeldung zweimal "anmeldet". Dadurch wird last_sign_in_at auf denselben (oder fast denselben) Wert wie current_sign_in_at gesetzt. Auf meiner Website verwende ich last_sign_in_at , um den Benutzer wissen zu lassen, was seit dem letzten Besuch der Website passiert ist, und als solche muss es etwas genauer sein. Außerdem protokolliert es +1 Login-Anzahl.

Außerdem gibt es Leute (wie ich), die ein Browserfenster für Tage offen lassen, ohne es zu schließen (und daher niemals das Sitzungsflag zu löschen). Für metrische Zwecke usw. kann es nützlich sein, wenn das Benutzerverhalten manchmal current_sign_in_at time aktualisiert.

Die folgenden Varianten werden diese Dinge beheben.

%Vor%

Wenn ich jedoch das oben genannte mit Devise 3.2.4 versuche, erhalte ich eine neue Anmeldung, wenn es sich automatisch per Cookie anmeldet (Login-Count +1 und current_sign_in_at werden gesetzt). Daher bleibt nur noch das Problem, dass das Tracking auch für Benutzer, die die Sitzung geöffnet halten, regelmäßig aktualisiert wird.

%Vor%     
Oskar Holmkratz 23.02.2016 17:52
quelle
-1

AFAIK Sie können auch update_tracked_fields! für dieses current_user -Modell verwenden.

    
Alexander Zinchuk 23.01.2015 12:08
quelle