Punerea în aplicare a „Amintește-mi“ într-o aplicație Rails

voturi
46

My Rails aplicație are un semn în caseta cu o casetă de selectare „remember me“. Utilizatorii care verifică acea cutie ar trebui să rămână conectat chiar și după închiderea browser-ul lor. Sunt păstrarea urmări dacă utilizatorii sunt autentificat prin stocarea lor în sesiune id-ul utilizatorului.

Dar sesiuni sunt puse în aplicare în Sine ca cookie - uri de sesiune, care nu sunt persistente. Pot - i persistente:

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

Dar asta pare ca un hack, ceea ce este surprinzător pentru o astfel de funcționalitate comună. Există vreo modalitate mai bună?

Editați | ×

Răspunsul lui Gareth este destul de bun, dar aș dori în continuare un răspuns de la cineva familiarizat cu Rails 2 ( din cauza este unic CookieSessionStore).

Întrebat 02/08/2008 la 13:56
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
26

Tu nu ar trebui să fie aproape sigur extinderea cookie-ul de sesiune care urmează să fie trăit mult timp.

Deși nu se ocupă în mod specific cu șine acest articol se duce la o anumită lungime pentru a explica „amintesc eu“ cele mai bune practici.

Pe scurt, deși trebuie:

  • Adăugați o coloană suplimentară la masa de utilizator pentru a accepta o mare valoare aleatoare
  • Setați un cookie lung a trăit pe client, care combină ID-ul utilizatorului și valoarea aleatoare
  • Când începe o nouă sesiune, verificați existența id / valoarea cookie și pentru a autentifica utilizatorul nou în cazul în care se potrivesc.

Autorul recomandă, de asemenea, invalidarea valoarea aleatorie și resetarea cookie la fiecare conectare. Personal nu-mi place ca tine, atunci nu poate rămâne conectat într-un site pe două calculatoare. Aș tinde să vă asigurați că funcția mea de schimbare a parolei reseta, de asemenea, valoarea aleatoare de blocare, astfel, sesiuni de pe alte mașini.

Ca o notă finală, el dă sfaturi pentru a face anumite funcții (schimbare de modificare a parolei / e-mail, etc), disponibil la sesiuni auto autentificate este bine în valoare de mai jos, dar rareori văzut în lumea reală.

Publicat 02/08/2008 la 17:10
sursa de către utilizator

voturi
10

Am petrecut un timp de gândire despre acest lucru și a ajuns la câteva concluzii. Sine cookie-urile de sesiune sunt inviolabile în mod implicit, astfel încât într-adevăr nu trebuie să vă faceți griji cu privire la un cookie să fie modificat la capătul de client.

Iată ce am făcut:

  • cookie de sesiune este setat pentru a fi de lungă durată (6 luni sau cam asa ceva)
  • În interiorul magazinului de sesiune
    • Un „expiră la“ data la care este setat la conectare + 24 ore
    • numele de utilizator
    • Autentificat = true, așa că am putea permite sesssions utilizatorilor anonimi (nu sunt periculoase din cauza cookie protecție la manipulare)
  • Am adăuga un before_filter în controlerul de aplicare care verifică „expiră la“ o parte a sesiunii.

Atunci când utilizatorul verifică caseta „Remember Me“, am stabilit sesiunea [: expireson] dată care urmează să fie de conectare + 2 săptămâni. Nimeni nu poate fura cookie și rămâne autentificat pentru totdeauna sau mascaradă ca un alt utilizator, deoarece cookie-ul de sesiune șine este falsificată.

Publicat 16/09/2008 la 22:37
sursa de către utilizator

voturi
9

Aș sugera să fie aruncați o privire la RESTful_Authentication conectați, care are o punere în aplicare a prezentei, sau să comutați implementarea dvs. de a utiliza REST Authentication_plugin. Există o explicație bună despre cum să utilizați acest plug-in la Railscasts:

railscasts # 67 restful_authentication

Aici este un link către plugin-ul în sine

restful_authentication

Publicat 17/09/2008 la 15:17
sursa de către utilizator

voturi
5

Plugin-ul restful_authentication are o buna implementare a acestui:

http://agilewebdevelopment.com/plugins/restful_authentication

Publicat 06/08/2008 la 22:30
sursa de către utilizator

voturi
3

Aș merge pentru Concepe pentru o soluție de autentificare genial pentru șine.

Publicat 16/01/2011 la 05:26
sursa de către utilizator

voturi
3

Rețineți că nu doriți să persiste sesiunea, doar identitatea lor. Vei crea o sesiune proaspătă pentru ei atunci când se întorc pe site. În general, vă alocați doar un GUID pentru utilizator, scrie că cookie-lor, apoi utilizați pentru a le privi în sus când vin înapoi. Nu utilizați numele lor de conectare sau ID-ul de utilizator pentru token-ul, deoarece ar putea fi ușor de ghicit și permite vizitatorilor să deturneze vicleni conturile altor utilizatori.

Publicat 01/09/2008 la 22:46
sursa de către utilizator

voturi
3

Aceasta este o destul de bine scrie-up de o experiență de a crea tipi de 30 de zile de sesiuni persistente.

ATENȚIE: blog este din 2006

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

Publicat 03/08/2008 la 02:53
sursa de către utilizator

voturi
2

Aceasta a lucrat ca un farmec pentru mine:

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

Acum sesiunile CookieStore expiră după două săptămâni, prin care utilizatorul trebuie să prezinte acreditările lor de conectare din nou, pentru a fi în mod constant logat pentru încă două săptămâni.

Bascially, este la fel de simplu ca:

  1. inclusiv un fișier în furnizor / plugins
  2. set sesiune valoare de expirare în controler aplicație folosind doar o singură linie
Publicat 20/09/2008 la 09:58
sursa de către utilizator

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