2011-05-23 60 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