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?
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.
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.
AFAIK Sie können auch update_tracked_fields!
für dieses current_user
-Modell verwenden.
Tags und Links ruby-on-rails authentication devise warden