2008-10-10 160 views
8

我想以編程方式訪問Rails會話密鑰(我正在使用它來生成登錄令牌)。閱讀Rails會話祕密的最佳方式是什麼?

這是我想出來的:

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

這將返回會話密鑰。但是,每次你打電話的ActionController :: Base.session它增加了一個進入到一個數組,所以你最終的東西是這樣的:

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

這令我是沒有好處的。

有沒有更好的方法來訪問會話密鑰?

回答

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

謝謝,傑克。

由於祕密不改變基礎上,請求或行動,這也適用:

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

對於Rails的2.3,我用:

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

很酷,看起來更乾淨。我們必須在升級時更新我們的代碼。 – 2009-02-23 19:05:30

11

對於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

0

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

相關問題