阅读Rails会话秘密的最佳方式是什么?

问题描述:

我想以编程方式访问Rails会话密钥(我正在使用它来生成登录令牌)。阅读Rails会话秘密的最佳方式是什么?

这是我想出来的:

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

这将返回会话密钥。但是,每次你打电话的ActionController :: Base.session它增加了一个进入到一个数组,所以你最终的东西是这样的:

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

这令我是没有好处的。

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

ActionController::Base.session_options_for(request,params[:action])[:secret] 

谢谢,杰克。

由于秘密不改变基础上,请求或行动,这也适用:

ActionController::Base.session_options_for(nil,nil)[:secret] 

对于Rails的2.3,我用:

ActionController::Base.session_options[:secret] 
+0

很酷,看起来更干净。我们必须在升级时更新我们的代码。 – 2009-02-23 19:05:30

对于Rails4

Rails.configuration.secret_token 
Rails.configuration.secret_key_base 

For Rails3

Rails.configuration.secret_token 

但如果Rails2.x,像唐教区提到

ActionController::Base.session_options[:secret] 
+0

我对这两个都没有。这不正常,是吗?前几天我介绍了一个`config/secrets.yml`文件,可能它没有被读取? – 2015-03-16 12:11:45

对于Rails 3中,Rails.configuration是相同的,以Rails.application.config,所以Rails.configuration.secret_token的作用就像choonkeat提供了什么。