9

我想以编程方式访问 Rails 会话机密(我正在使用它来生成登录令牌)。

这是我想出的:

ActionController::Base.session.first[:secret]

这将返回会话密钥。但是,每次调用 ActionController::Base.session 时,它都会向数组添加另一个条目,因此您最终会得到如下内容:

[{:session_key=>"_new_app_session", :secret=>"totally-secret-you-guys"}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]

这让我觉得不好。

有没有更好的方法来访问会话秘密?

4

5 回答 5

12

对于 Rails4

Rails.configuration.secret_token
Rails.configuration.secret_key_base

对于 Rails3

Rails.configuration.secret_token

但是如果对于 Rails2.x,就像 Don Parish 提到的

ActionController::Base.session_options[:secret]
于 2011-02-01T05:27:46.360 回答
4

谢谢,杰克。

由于秘密不会根据请求或操作而更改,因此这也有效:

ActionController::Base.session_options_for(nil,nil)[:secret]
于 2008-10-10T17:16:43.587 回答
2
ActionController::Base.session_options_for(request,params[:action])[:secret]
于 2008-10-10T17:05:08.743 回答
1

对于 Rails 2.3,我使用过:

ActionController::Base.session_options[:secret]
于 2009-02-23T18:28:08.743 回答
0

对于 Rails 3,Rails.configuration 与 Rails.application.config 相同,因此 Rails.configuration.secret_token 就像 choonkeat 提供的一样。

于 2011-02-01T05:47:36.967 回答