阅读Rails会话密钥的最佳方法是什么?

Luk*_*ncl 9 ruby session ruby-on-rails

我想以编程方式访问Rails会话秘密(我用它来生成一个登录令牌).

这是我想出的:

ActionController::Base.session.first[:secret]
Run Code Online (Sandbox Code Playgroud)

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

[{:session_key=>"_new_app_session", :secret=>"totally-secret-you-guys"}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
Run Code Online (Sandbox Code Playgroud)

这让我觉得不好.

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

cho*_*eat 11

对于Rails4

Rails.configuration.secret_token
Rails.configuration.secret_key_base
Run Code Online (Sandbox Code Playgroud)

对于Rails3

Rails.configuration.secret_token
Run Code Online (Sandbox Code Playgroud)

但是如果对于Rails2.x,就像Don Parish所说的那样

ActionController::Base.session_options[:secret]
Run Code Online (Sandbox Code Playgroud)


Luk*_*ncl 5

谢谢,杰克.

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

ActionController::Base.session_options_for(nil,nil)[:secret]
Run Code Online (Sandbox Code Playgroud)


who*_*ake 2

ActionController::Base.session_options_for(request,params[:action])[:secret]
Run Code Online (Sandbox Code Playgroud)