Realizace „Pamatuj si mě“ v aplikaci Rails

hlasů
46

My Rails-app má znak v poli se zaškrtávací políčko „Zapamatovat si mě“. Uživatelé, kteří si zkontrolujte, zda je políčko by mělo zůstat přihlášeni i po zavření svého prohlížeče. Já sledování toho, zda jsou uživatelé přihlášeni uložením jejich id v relaci uživatele.

Ale sessions jsou implementovány v Rails jako session cookies, které nejsou perzistentní. Mohu dělat jim 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

Ale to vypadá jako hack, který je překvapivé pro takovou společnou funkčnost. Existuje nějaký lepší způsob?

Upravit

Gareth Odpověď je docela dobrý, ale já bych ještě rád odpověď od někoho obeznámený s kolejnicemi 2 (protože to je jedinečná CookieSessionStore).

Položena 02/08/2008 v 13:56
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
26

Měli byste se téměř jistě nebudou prodloužení cookie relace, které mají být dlouho žil.

I když to není výslovně zabývají kolejnicemi tento článek jde do určité délky, aby vysvětlil ‚Pamatuj si mě‘ osvědčených postupů.

V souhrnu by jste měl

  • Přidat další sloupec do tabulka uživatele přijmout velkou náhodnou hodnotu
  • Nastavit dlouho žil cookie na straně klienta, který kombinuje ID uživatele a náhodnou hodnotu
  • Při spuštění nové relace, zkontrolujte existenci id / hodnotu cookie a ověření nového uživatele, zda se shodují.

Autor rovněž doporučuje zrušení platnosti náhodnou hodnotu a resetování cookie při každém přihlášení. Osobně se mi nelíbí, že když pak nemůže zůstat přihlášen do místa, na dvou počítačích. Já bych spíše, aby se ujistil funkci své heslo výměna resetovat také náhodnou hodnotu tedy uzamčení relací na jiných počítačích.

Jako poslední poznámku, radu dává o zpřístupnění některých funkcí (změna hesla / změnu e-mailu atd) nedostupný auto ověřen sezení stojí následující možnosti, ale jen zřídka vidět v reálném světě.

Odpovězeno 02/08/2008 v 17:10
zdroj uživatelem

hlasů
10

Strávil jsem nějaký čas přemýšlet o tom a dospěla k několika závěrům. Kolejnice soubory cookie relací jsou odolné proti falšování výchozím nastavení, takže si opravdu nemusíte obávat cookie upravovaný na konci klienta.

Zde je to, co jsem udělal:

  • cookie relace je nastaven na trvanlivý (6 měsíců nebo tak)
  • Uvnitř obchodu relace
    • O "vyprší datum spotřeby, který je nastaven pro přihlášení + 24 hodin
    • uživatelské ID
    • Ověřený = true, takže můžu umožnit anonymní uživatel sesssions (není nebezpečný, protože cookie ochrana před změnami)
  • Přidám before_filter v řídicí aplikace, která kontroluje jen ‚vyprší‘ v rámci zasedání.

Když uživatel kontroluje „Remember Me“ box, jen jsem nastavit relace [: expireson] datum se přihlásit + 2 týdny. Nikdo nemůže ukrást cookie a zůstali přihlášeni navždy nebo vydávat za jiného uživatele, protože cookie kolejnice relace je chráněn před manipulací.

Odpovězeno 16/09/2008 v 22:37
zdroj uživatelem

hlasů
9

Navrhoval bych, že buď se podívat na RESTful_Authentication zapojit, která má realizaci tohoto, nebo jen přepnout implementaci používat REST Authentication_plugin. Tam je dobré vysvětlení o tom, jak používat tuto zástrčku na Railscasts:

railscasts # 67 restful_authentication

Zde je odkaz na samotný plugin

restful_authentication

Odpovězeno 17/09/2008 v 15:17
zdroj uživatelem

hlasů
5

Restful_authentication plugin má dobrou realizaci takto:

http://agilewebdevelopment.com/plugins/restful_authentication

Odpovězeno 06/08/2008 v 22:30
zdroj uživatelem

hlasů
3

Chtěl bych jít na navrhnout pro brilantní autentizační řešení pro kolejnice.

Odpovězeno 16/01/2011 v 05:26
zdroj uživatelem

hlasů
3

Všimněte si, že nechcete, aby přetrvávat své relace, jen svou identitu. Budete-li vytvořit novou relaci pro ně, když se vrátí do svých stránkách. Obecně stačí přiřadit GUID pro uživatele, psát, že jejich cookie, pak používat to, aby jim vypadat, když se vrátí. Nepoužívejte své přihlašovací jméno nebo ID uživatele k tokenu, jak by mohla být snadno uhodnout a umožnit návštěvníkům vychytralí unést účty jiných uživatelů.

Odpovězeno 01/09/2008 v 22:46
zdroj uživatelem

hlasů
3

To je docela dobrý write-up jednoho kluci zkušeností vytvoření 30-denní trvalé sezení.

POZOR: blog post je od roku 2006

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

Odpovězeno 03/08/2008 v 02:53
zdroj uživatelem

hlasů
2

Tato pracoval jako kouzlo pro mě:

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

Teď moje CookieStore relace vyprší po dvou týdnech, kdy uživatel musí znovu předložit své přihlašovací údaje, aby bylo trvale přihlášeným po dobu dalších dvou týdnů.

Bascially, je to tak jednoduché, jak:

  1. včetně jeden soubor dodavatele / plugins
  2. set relace hodnota vypršení platnosti regulátor aplikací pomocí pouhého jednoho řádku
Odpovězeno 20/09/2008 v 09:58
zdroj uživatelem

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