Rails 4不加密cookie内容

你好我正在尝试加密和保护我的cookie中包含的数据,但似乎数据只被编码(base64)

这是一个例子:

cookies.signed[:example] = { :value => 'can you see this?', :httponly => true, :expire_after => 30.minutes, :secure => true } 

这是cookie的内容:

 BAhJIhZjYW4geW91IHNlZSB0aGlzPwY6BkVG--b4a8bbd7cd35e392ccd788df0008fd10b48442b2 

如果我解码字符串(base64)我得到:

 I"can you see this?:EFom{q{vq{_M<}to8f 

我想知道我错过了什么,目前这就是我所拥有的

session_store.rb:

 Service::Application.config.session_store :cookie_store, key: '_service_session' 

在我的secret_token.rb中我设置了这样的东西:

 Service::Application.config.secret_key_base = 'e892d55cbc205bb6..' 

你的cookis没有加密,因为你在cookie jar上使用了signed方法,而且只是签署了cookie内容。

要加密cookie,请使用encrypted方法:

 cookies.encrypted[:discount] = 45 # => Set-Cookie: discount=ZS9ZZ1R4cG1pcUJ1bm80anhQang3dz09LS1mbDZDSU5scGdOT3ltQ2dTdlhSdWpRPT0%3D--ab54663c9f4e3bc340c790d6d2b71e92f5b60315; path=/ cookies.encrypted[:discount] # => 45 

撇开接受的答案:

根据您的具体情况:如果您需要加密,可能需要考虑使用会话cookie。 (正如已接受的答案所示:您可以加密cookie,但是会话cookie可能更合适)。

默认情况下,在rails 4中:会话cookie默认为加密和签名。

相关的Rails文档 。

具体部分:

如果您只设置了secret_token,则您的cookie将被签名,但不会加密。 这意味着用户无法在不知道应用的密钥的情况下更改其user_id,但可以轻松读取其user_id。 这是Rails 3应用程序的默认设置。

如果您设置了secret_key_base,则您的cookie将被加密。 这比签名cookie更进一步,因为加密的cookie不能被用户更改或读取。 这是Rails 4中的默认开头。

secret_key_base默认位于rails 4中:config / secrets.yml。

在rails 4中的用法:

 # In rails 4 by default, this will be encrypted and signed session[user_id] = 1