Implementering av "Husk meg" i en Rails applikasjon

stemmer
48

Min Rails-app har et skilt i boks med en husk meg boksen. Brukere som sjekker at boksen skal forbli innlogget selv etter stengetid deres nettleser. Jeg holder styr på om brukerne er logget inn ved å lagre deres id i brukerens session.

Men økter er implementert i Rails som session cookies, som ikke er vedvarende. Jeg kan gjøre dem 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

Men det virker som en hack, som er overraskende for felles funksjonalitet. Er det noen bedre måte?

Redigere

Gareth svar er ganske bra, men jeg ønsker likevel et svar fra noen kjent med Rails 2 (på grunn av det unike CookieSessionStore).

Publisert på 02/08/2008 klokken 12:56
kilden bruker
På andre språk...                            


8 svar

stemmer
27

Du bør nesten helt sikkert ikke utvide øktinformasjonskapsel å bli lenge levd.

Selv om det ikke da spesielt med rails denne artikkelen går til noen lengde for å forklare 'Husk meg' beste praksis.

Oppsummert om du skal:

  • Legg til en ekstra kolonne til brukeren bordet for å ta imot en stor tilfeldig verdi
  • Sett en lang levde kapsel på klienten som kombinerer bruker-ID og tilfeldig verdi
  • Når en ny økt starter, sjekk for eksistensen av id / verdi cookie og godkjenne den nye brukeren om de passer.

Forfatteren anbefaler også ugyldig tilfeldig verdi og tilbakestille informasjonskapsel ved hver innlogging. Personlig liker jeg ikke at du da ikke kan holde logget inn på området på to datamaskiner. Jeg ville tendens til å sørge for at passordet mitt skiftende funksjon også tilbakestille tilfeldig verdi og dermed låse ut økter på andre maskiner.

Som et siste notat, råd han gir på å gjøre visse funksjoner (endring av passord / e-post endring etc) utilgjengelig for auto autentisert økter er vel verdt å følge, men sjelden sett i den virkelige verden.

Svarte 02/08/2008 kl. 16:10
kilden bruker

stemmer
11

Jeg har brukt en stund å tenke på dette, og kom til noen konklusjoner. Skinner session cookies er tamper-proof som standard, slik at du egentlig ikke trenger å bekymre deg for en informasjonskapsel blir endret på klienten slutten.

Her er hva jeg har gjort:

  • Session cookie er satt til å være lang levetid (6 måneder eller så)
  • Inne i økten butikken
    • En 'utgår' dato som er satt til å logge + 24 timer
    • bruker-ID
    • Godkjent = sant, så jeg kan tillate anonyme bruker sesssions (ikke farlig på grunn av cookie sabotasjebeskyttelse)
  • Jeg legger til en before_filter i Application Controller som kontrollerer 'utgår' delen av økten.

Når brukeren kontrollerer "Husk meg" boksen, jeg bare sette økten [: expireson] datoen skal logge + 2 uker. Ingen kan stjele cookien og innlogget for alltid eller masquerade som en annen bruker fordi skinnene session cookie er tamper-proof.

Svarte 16/09/2008 kl. 21:37
kilden bruker

stemmer
9

Jeg vil foreslå at du enten ta en titt på RESTful_Authentication plugge inn, som har en implementering av dette, eller bare slå implementeringen å bruke RESTful Authentication_plugin. Det er en god forklaring på hvordan du bruker denne plug in på Railscasts:

railscasts # 67 restful_authentication

Her er en link til plugin seg selv

restful_authentication

Svarte 17/09/2008 kl. 14:17
kilden bruker

stemmer
5

Den restful_authentication plugin har en god gjennomføring av dette:

http://agilewebdevelopment.com/plugins/restful_authentication

Svarte 06/08/2008 kl. 21:30
kilden bruker

stemmer
3

Jeg vil gå for Tenke for en strålende autentiseringsløsning for rails.

Svarte 16/01/2011 kl. 04:26
kilden bruker

stemmer
3

Merk at du ikke ønsker å fortsette sin sesjon, bare deres identitet. Du vil opprette en ny sesjon for dem når de kommer tilbake til nettstedet ditt. Vanligvis du bare tildele en GUID til brukeren, skriver at deres informasjonskapsel, og deretter bruke den til å slå dem opp når de kommer tilbake. Ikke bruk deres innloggingsnavn eller bruker-ID for token som det kunne lett bli gjettet og la crafty besøkende å kapre andre brukeres kontoer.

Svarte 01/09/2008 kl. 21:46
kilden bruker

stemmer
3

Dette er en ganske god skrive opp av en gutta erfaring med å lage 30-dagers vedvarende økter.

ADVARSEL: blogginnlegg er fra 2006

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

Svarte 03/08/2008 kl. 01:53
kilden bruker

stemmer
2

Dette virket som en sjarm for meg:

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

Nå mine CookieStore økter utløper etter to uker, der brukeren må sende inn sine påloggingsinformasjon på nytt for å være vedvarende logget på i ytterligere to uker.

Bascially, det er så enkelt som:

  1. inkludert en fil i leverandør / plugins katalogen
  2. set sesjon utløpet verdi i søknad styreenheten ved hjelp av bare én linje
Svarte 20/09/2008 kl. 08:58
kilden bruker

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