2008-10-10 12 views
8

Ich möchte programmgesteuert auf das Rails-Sitzungsgeheimnis zugreifen (ich verwende es, um ein Anmelde-Token zu generieren).Wie liest man am besten das Sitzungsgeheimnis von Rails?

Hier ist, was ich bin gekommen, sich mit:

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

Dies gibt die Session-Geheimnis. jedes Mal, wenn Sie jedoch rufen Action :: Base.session fügt einen weiteren Eintrag in ein Array, so dass Sie mit etwas so enden:

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

Dies scheint mir nicht gut zu sein.

Gibt es eine bessere Möglichkeit, auf das Sitzungsgeheimnis zuzugreifen?

Antwort

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

Danke, Jake.

Da das Geheimnis nicht auf Antrag oder die Handlung basiert nicht ändert, funktioniert das auch:

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

für Rails 2.3, habe ich verwendet:

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

Cool, das sieht sauberer aus. Ich muss unseren Code aktualisieren, wenn wir upgraden. –

11

Für Rails4

Rails.configuration.secret_token 
Rails.configuration.secret_key_base 

Für Rails3

Rails.configuration.secret_token 

Aber wenn für Rails2.x, wie Don Parish

erwähnt
ActionController::Base.session_options[:secret] 
+0

Ich bekomme für beide nichts. Das ist nicht normal, oder? Ich habe vor ein paar Tagen eine 'config/secrets.yml'-Datei eingeführt, vielleicht wird sie nicht gelesen? –

+1

Die zu dieser Datei hinzugefügten Geheimnisse sind über 'Rails.application.secrets' zugänglich. – zenw0lf

0

Für Rails 3 ist Rails.configuration gleich Rails.application.config, so Rails.configuration.secret_token wirkt ebenso, was choonkeat bereitgestellt .

Verwandte Themen