2011-05-23 107 views
4

我想實現一個記得我選擇的登錄因此如何哈希值存儲在與軌道餅乾3

我要來存儲用戶名和散列密碼,以一個cookie,並檢查它當用戶回來到現場。

我試圖做

cookies[:user] = { :value => {:username => @user.username, :password => 
@user.hashed_password}, :expires => 1.month.from_now } 

它保存cookie的,但我不能用的方式讀它的屬性

cookies[:user].username # doesn't work 

,是它實現了rememberMe最好的解決辦法?

+0

爲什麼不使用devise gem? – Roman 2011-05-23 20:03:36

+2

我正在用rails製作我的第一個應用程序,並且我想更好地理解引擎蓋下發生的事情。 – gilsilas 2011-05-23 20:13:55

回答

-2

也許this answer可以幫助你

+1

這回答了他創建「記住我」功能的問題,但它沒有回答以下問題:「如何使用rails 3將cookie存儲在cookie中」。 – MikeJ 2013-06-24 17:35:20

3

最好使用session方法來設置這些各種各樣的事情。請隨時使用config/initializers/session_store.rb中的默認:cookie_store設置將會話保留在cookie中。

session[:user] = { :foo => { :bar => 'woot' } } 

再後來......

session[:user][:foo][:bar] # => 'woot' 
+0

如何更改會話過期?當基於cookie的會話我認爲用戶可以更改user_id並以其他用戶身份登錄時,我說得對嗎? – gilsilas 2011-05-23 20:57:39

+0

是的,如果你使用了像'user_id'這樣簡單的東西,那麼破解會很簡單。這就是爲什麼很少有人使用':cookie_store' – smathy 2011-05-23 21:30:03

3

從我有read,一次只能存儲字符串中的cookies。爲了存儲需要序列化數據的其他數據結構,例如JSON或YAML。

我猜Session對象有這個內置的

+9

採用新型的哈希語法簡潔:'餅乾[:用戶] = {值:{用戶名:@ user.username,密碼:@ user.hashed_pa​​ssword} .to_json,到期: 1.month.from_now}'然後使用:'foo = JSON.parse(cookies [:user])''。 foo現在將成爲一個Hash,但所有鍵都轉換爲字符串,因此您可能需要使用:'foo = JSON.parse(cookies [:user])。with_indifferent_access'。那麼foo [:username]不會是零。 – MikeJ 2013-06-24 17:44:21

+0

@MikeJ你的評論應該是一個答案(並且被接受),因爲它很簡潔並且有一個具體的例子。 – thekingoftruth 2014-01-15 19:16:23