Die Umsetzung von „Remember me“ in einer Rails-Anwendung

stimmen
46

Meine Rails-Anwendung hat ein Zeichen in Box mit einem remember me Checkbox. Benutzer, die diesen Kasten überprüfen sollen, in auch nach dem Schließen ihres Browser eingeloggt bleiben. Ich behalte den Überblick über, ob Benutzer durch die Speicherung ihrer ID in der Sitzung des Benutzers angemeldet.

Aber Sitzungen werden in Rails als Session - Cookies implementiert, die nicht persistent sind. Ich kann machen sie persistent:

class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end

Aber das scheint wie ein Hack, die für eine solche gemeinsame Funktionalität überraschend. Gibt es einen besseren Weg?

Bearbeiten

Gareth Antwort ist ziemlich gut, aber ich möchte noch eine Antwort von jemandem vertraut mit Rails 2 (weil es einzigartig ist CookieSessionStore).

Veröffentlicht am 02/08/2008 um 13:56
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
26

Sie sollten an Sicherheit grenzender Wahrscheinlichkeit nicht werden zur Verlängerung der Session-Cookies lange gelebt werden.

Obwohl es nicht speziell mit Schienen handelt dieser Artikel geht bis zu einem gewissen Länge Best Practices zu erklären ‚ an mich erinnern‘.

Zusammenfassend wenn Sie sollten:

  • Fügen Sie eine zusätzliche Spalte zu der Benutzertabelle einen großen Zufallswert zu akzeptieren
  • Legen Sie ein langlebiges Cookie auf dem Client, der den Benutzer-ID und den Zufallswert kombiniert
  • Wenn eine neue Sitzung gestartet wird, überprüfen Sie die Existenz der ID / Wert-Cookie und die neuen Benutzer authentifizieren, wenn sie übereinstimmen.

Der Autor empfiehlt auch den Zufallswert ungültig zu machen und bei jeder Login das Cookie zurückgesetzt wird. Persönlich mag ich nicht, dass da Sie dann nicht in eine Stelle auf zwei Computer angemeldet bleiben. Ich würde dazu neigen, sicher, dass mein Passwort-Wechsel-Funktion auch so den Zufallswert Sitzungen auf anderen Rechnern Aussperren zurückgesetzt zu machen.

Als abschließende Bemerkung, der Rat, den er mit dem bestimmten Funktionen (Passwortänderung / E-Mail-Wechsel usw.) nicht zur Verfügung Auto authentifizierte Sitzungen lohnen gibt folgende, aber selten in der realen Welt gesehen.

Beantwortet am 02/08/2008 um 17:10
quelle vom benutzer

stimmen
10

Ich habe eine Weile darüber nachzudenken, diese verbracht und kam zu einigen Schlussfolgerungen. Rails Session-Cookies sind manipulationssicher standardmäßig, so dass Sie wirklich brauchen nicht über ein Cookie Sorge auf dem Client-Ende modifiziert.

Hier ist, was ich getan habe:

  • Session-Cookie gesetzt ist langlebig (6 Monate oder so) zu sein
  • Innerhalb der Session-Speicher
    • Ein ‚läuft am‘ Datum, das eingestellt ist + 24 Stunden anmelden
    • Benutzeridentifikation
    • Authentifizierte = true, damit ich für anonyme Benutzer die Sessions zulassen kann (nicht gefährlich wegen des Cookie Manipulationsschutz)
  • Ich füge einen before_filter im Application Controller, der die ‚läuft am‘ Teil der Sitzung überprüft.

Wenn der Benutzer überprüft die „Remember Me“ Box, habe ich nur die Sitzung [: expireson] Datum + 2 Wochen anmelden werden. Niemand kann das Cookie stehlen und für immer oder als einen anderen Benutzer Maskerade angemeldet bleiben, weil die Schienen Session-Cookie ist fälschungssicher.

Beantwortet am 16/09/2008 um 22:37
quelle vom benutzer

stimmen
9

Ich würde vorschlagen, dass Sie entweder einen Blick auf die Restful_authentication nehmen stecken, die eine Implementierung dieser hat, oder einfach nur schalten Sie Ihre Implementierung die RESTful Authentication_plugin zu verwenden. Es gibt eine gute Erklärung darüber, wie diese Stecker zu verwenden, in bei Railscasts:

Railscasts # 67 restful_authentication

Hier ist ein Link zu dem Plugin selbst

restful_authentication

Beantwortet am 17/09/2008 um 15:17
quelle vom benutzer

stimmen
5

Das restful_authentication Plugin hat eine gute Umsetzung dieser:

http://agilewebdevelopment.com/plugins/restful_authentication

Beantwortet am 06/08/2008 um 22:30
quelle vom benutzer

stimmen
3

Ich würde für eine brillante Authentifizierungslösung für Schienen für Devise gehen.

Beantwortet am 16/01/2011 um 05:26
quelle vom benutzer

stimmen
3

Beachten Sie, dass Sie nicht wollen, ihre Sitzung beharren, nur um ihre Identität. Sie werden eine neue Sitzung für sie schaffen, wenn sie wieder auf Ihre Website. Im Allgemeinen Sie nur eine GUID für den Benutzer zuordnen, schreiben, dass auf ihre Cookie, dann verwenden, um sie zu sehen, wenn sie zurückkommen. verwenden, um ihre Anmeldenamen oder Benutzer-ID für die Token nicht, da es leicht erraten werden könnte und erlauben schlaue Besucher anderen Benutzer-Accounts kapern.

Beantwortet am 01/09/2008 um 22:46
quelle vom benutzer

stimmen
3

Dies ist eine ziemlich gute Zuschreibung von einer Jungs Erfahrung von 30-Tagen-permanente Sitzungen zu schaffen.

ACHTUNG: Blog-Post ist aus dem Jahr 2006

http://grahamglass.blogs.com/main/2006/05/rails_sessionsr.html

Beantwortet am 03/08/2008 um 02:53
quelle vom benutzer

stimmen
2

Das funktionierte wie ein Zauber für mich:

http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/

Nun verfallen meine CookieStor Sitzungen nach zwei Wochen, wobei die Benutzer ihre Anmeldeinformationen erneut einreichen, um müssen beharrlich angemeldeten in noch zwei Wochen.

Bascially, es ist so einfach wie:

  1. einschließlich einer Datei in vendor / plugins
  2. set session Ablaufwert in Anwendungssteuerung nur eine Zeile mit
Beantwortet am 20/09/2008 um 09:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more