Vra

My Rails-app het 'n aantekenblokkie met 'n "onthou my"-merkblokkie.Gebruikers wat daardie blokkie merk, moet aangemeld bly selfs nadat hulle hul blaaier gesluit het.Ek hou tred of gebruikers aangemeld is deur hul ID in die gebruiker se sessie te stoor.

Maar sessies word in Rails geïmplementeer as sessiekoekies, wat nie aanhoudend is nie.ek kan maak hulle aanhoudend:

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

Maar dit lyk soos 'n hack, wat verbasend is vir sulke algemene funksionaliteit.Is daar 'n beter manier?

Wysig

Gareth se antwoord is redelik goed, maar ek sal steeds 'n antwoord wil hê van iemand wat vertroud is met Rails 2 (omdat dit uniek is CookieSessionStore).

Was dit nuttig?

Oplossing

Ek het 'n rukkie hieroor nagedink en tot 'n paar gevolgtrekkings gekom.Rails-sessiekoekies is by verstek peuterbestand, so jy hoef regtig nie bekommerd te wees dat 'n koekie aan die kliëntkant gewysig word nie.

Hier is wat ek gedoen het:

  • Sessiekoekie is ingestel om langlewend te wees (6 maande of so)
  • Binne die sessiewinkel
    • 'n 'verval op'-datum wat gestel is op aanmeld + 24 uur
    • gebruiker ID
    • Geverifieer = waar sodat ek anonieme gebruikersessies kan toelaat (nie gevaarlik as gevolg van die koekie-peuterbeskerming nie)
  • Ek voeg 'n before_filter by in die toepassingsbeheerder wat die 'verval op' deel van die sessie kontroleer.

Wanneer die gebruiker die "Onthou my" blokkie merk, stel ek net die sessie[:vervaldatum] datum om aan te meld + 2 weke.Niemand kan die koekie steel en vir ewig aangemeld bly of hom as 'n ander gebruiker voordoen nie, want die rails-sessie-koekie is peutervry.

Ander wenke

Jy behoort byna beslis nie die sessiekoekie uit te brei om lank te lewe nie.

Alhoewel dit nie spesifiek met relings te doen het nie Hierdie artikel gaan tot 'n mate om 'onthou my'-beste praktyke te verduidelik.

Opsommend moet jy egter:

  • Voeg 'n ekstra kolom by die gebruikerstabel om 'n groot ewekansige waarde te aanvaar
  • Stel 'n langlewende koekie op die kliënt wat die gebruiker-ID en die ewekansige waarde kombineer
  • Wanneer 'n nuwe sessie begin, kyk vir die bestaan ​​van die ID/waarde-koekie en verifieer die nuwe gebruiker as hulle ooreenstem.

Die skrywer beveel ook aan om die ewekansige waarde ongeldig te maak en die koekie terug te stel by elke aanmelding.Persoonlik hou ek nie daarvan nie aangesien jy dan nie op twee rekenaars by 'n werf aangemeld kan bly nie.Ek is geneig om seker te maak dat my wagwoordveranderende funksie ook die ewekansige waarde terugstel en sodoende sessies op ander masjiene uitsluit.

As 'n laaste opmerking, is die raad wat hy gee oor die maak van sekere funksies (wagwoordverandering/e-posverandering, ens.) onbeskikbaar vir outo-geverifieerde sessies die moeite werd om te volg, maar word selde in die regte wêreld gesien.

Ek stel voor dat jy óf kyk na die RESTful_Authentication-inprop, wat 'n implementering hiervan het, óf net jou implementering verander om die RESTful Authentication_plugin te gebruik.Daar is 'n goeie verduideliking oor hoe om hierdie inprop by Railscasts te gebruik:

railscasts #67 rustige_verifikasie

Hier is 'n skakel na die inprop self

rustige_verifikasie

Die restful_authentication-inprop het 'n goeie implementering hiervan:

http://agilewebdevelopment.com/plugins/restful_authentication

Let daarop dat jy nie hul sessie wil volhou nie, net hul identiteit.Jy sal 'n nuwe sessie vir hulle skep wanneer hulle na jou werf terugkeer.Oor die algemeen ken jy net 'n GUID aan die gebruiker toe, skryf dit aan hul koekie en gebruik dit dan om hulle op te soek wanneer hulle terugkom.Moenie hul aanmeldnaam of gebruikers-ID vir die teken gebruik nie, aangesien dit maklik geraai kan word en listige besoekers toelaat om ander gebruikers se rekeninge te kaap.

Dit is 'n redelike goeie opskrif van een ouens se ervaring met die skep van 30-dae aanhoudende sessies.

WAARSKUWING:blogpos is van 2006

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

Dit het vir my soos 'n sjarme gewerk:

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

Nou verval my CookieStore-sessies na twee weke, waardeur die gebruiker weer hul aanmeldbewyse moet indien om vir nog twee weke aanhoudend ingeteken te wees.

Basies is dit so eenvoudig soos:

  1. insluitend een lêer in die verkoper / plugins gids
  2. stel sessie-vervalwaarde in toepassingbeheerder met net een reël

Ek sal vir Devise gaan vir 'n briljante verifikasie-oplossing vir relings.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top