Realizacja „Zapamiętaj mnie” w aplikacji Rails

głosy
46

Moja aplikacja Rails ma znak w polu z „zapamiętaj mnie” wyboru. Użytkownicy, którzy Upewnij się, że pole powinno pozostać zalogowany nawet po zamknięciu przeglądarce. Jestem śledzenie, czy użytkownicy są rejestrowane w przechowując ich identyfikator sesji użytkownika.

Ale sesje są realizowane w Rails jako sesyjne, które nie są trwałe. Mogę zrobić im trwałe:

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

Ale to wydaje się hack, co jest zaskakujące dla takiego wspólnego funkcjonalności. Czy jest jakiś lepszy sposób?

Edytować

Gareth odpowiedź jest dość dobre, ale nadal chciałby uzyskać odpowiedź od kogoś znanego z szyn 2 (ze względu na jego wyjątkowy CookieSessionStore).

Utwórz 02/08/2008 o 13:56
źródło użytkownik
W innych językach...                            


8 odpowiedzi

głosy
26

Nie powinno być rozszerzenie prawie na pewno cookie sesji mają być długo żył.

Chociaż nie jest to specjalnie do czynienia z szynami ten artykuł idzie do jakiejś długości wyjaśnić „Zapamiętaj mnie” najlepszych praktyk.

Podsumowując, choć należy:

  • Dodać dodatkową kolumnę w tabeli użytkownika, aby zaakceptować dużą wartość losową
  • Ustaw długo żył cookie na kliencie, które łączy identyfikatora użytkownika i wartość losową
  • Gdy rozpoczyna się nowa sesja, sprawdzać istnienie id / wartość cookie i uwierzytelnienia nowego użytkownika, jeśli one same.

Autor zaleca również unieważnienia wartość losową i resetowanie cookie na każdym logowaniu. Osobiście nie podoba mi się, że jak wtedy nie może pozostawać zalogowany w witrynie na dwóch komputerach. Chciałbym mają tendencję, aby upewnić się moje zmiany hasła funkcja również wyzerować wartość losową tym samym blokując sesje na innych maszynach.

Jako ostatni pamiętać, że on daje radę na dokonanie pewnych funkcji (Zmień Zmień hasło / e-mail itp) niedostępne dla samochodów uwierzytelnieniu sesji jest warta następujący ale rzadko spotykane w świecie rzeczywistym.

Odpowiedział 02/08/2008 o 17:10
źródło użytkownik

głosy
10

Spędziłem trochę czasu myśląc o tym i doszedł do pewnych wniosków. Szyny sesyjne są odporne na manipulacje domyślnie, więc naprawdę nie trzeba się martwić o cookie modyfikowane na końcu klienta.

Oto co zrobiłem:

  • cookie sesji ustawiona jest długowieczne (6 miesięcy lub tak)
  • Wewnątrz sklepu sesji
    • Za „wygasa w” dniu, w którym jest ustawiony, aby zalogować się + 24 godziny
    • identyfikator użytkownika
    • Uwierzytelniony = true, więc mogę pozwolić na anonimowych sesssions użytkownika (nie są niebezpieczne ze względu na ingerencję ochrony ciasteczka)
  • Dodam before_filter w kontrolerze aplikacji, które sprawdza „wygasa w” części sesji.

Gdy użytkownik sprawdza „Remember Me” okno, po prostu ustawić sesji [: expireson] data zostanie login + 2 tyg. Nikt nie może ukraść ciasteczko i pozostać zalogowany na zawsze lub maskarada jako inny użytkownik, ponieważ cookie sesji szyny jest odporne na manipulacje.

Odpowiedział 16/09/2008 o 22:37
źródło użytkownik

głosy
9

Sugerowałbym, że albo spojrzeć na RESTful_Authentication podłączyć, który ma realizacja tego, czy po prostu przełączyć wdrażanie do korzystania z relaksującego Authentication_plugin. Jest to dobre wyjaśnienie o tym, jak korzystać z tej wtyczki w Railscasts:

railscasts nr 67 restful_authentication

Tu jest link do samej wtyczki

restful_authentication

Odpowiedział 17/09/2008 o 15:17
źródło użytkownik

głosy
5

Wtyczka restful_authentication ma dobrą realizację tego:

http://agilewebdevelopment.com/plugins/restful_authentication

Odpowiedział 06/08/2008 o 22:30
źródło użytkownik

głosy
3

Chciałbym pójść do wymyślać dla genialnego rozwiązania uwierzytelniania dla szyn.

Odpowiedział 16/01/2011 o 05:26
źródło użytkownik

głosy
3

Zauważ, że nie chcesz, aby utrzymywać ich sesji, tylko ich tożsamość. Będziesz tworzyć nową sesję dla nich po powrocie do swojej stronie. Ogólnie po prostu przypisać GUID dla użytkownika, piszą, że ich pliku cookie, a następnie użyć go do wyszukać je, kiedy wróci. Nie należy używać nazwy użytkownika i hasła lub identyfikatora użytkownika do tokena, ponieważ może być łatwo domyślić i pozwalają przebiegły odwiedzających porwać kont innych użytkowników.

Odpowiedział 01/09/2008 o 22:46
źródło użytkownik

głosy
3

Jest to całkiem dobry write-up jednego facetów doświadczenie tworząc 30-dniowe sesje trwałe.

UWAGA: blog post jest z 2006 roku

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

Odpowiedział 03/08/2008 o 02:53
źródło użytkownik

głosy
2

To działało jak urok dla mnie:

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

Teraz moje sesje CookieStore wygasa po dwóch tygodniach, w którym użytkownik musi przedstawić swoje dane logowania ponownie, aby być stale zalogowanych przez kolejne dwa tygodnie.

Bascially, jest to tak proste, jak:

  1. w tym jeden plik w katalogu plugins sprzedawca /
  2. zestaw sesja wartość wygaśnięcia w kontrolerze aplikacji przy użyciu tylko jednej linii
Odpowiedział 20/09/2008 o 09:58
źródło użytkownik

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