2008-10-10 23 views
8

Me gustaría acceder a la sesión secreta de Rails mediante programación (la estoy usando para generar un token de inicio de sesión).¿Cuál es la mejor manera de leer el secreto de la sesión de Rails?

Aquí es lo que he llegado con:

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

Esto devuelve el secreto de sesión. Sin embargo, cada vez que llame ActionController :: Base.session que añade otra entrada a una matriz por lo que terminan con algo como esto:

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

Esto me parece ser nada bueno.

¿Hay una forma mejor de acceder al secreto de la sesión?

Respuesta

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

Gracias, Jake.

Dado que el secreto no en función de la solicitud o de la acción, esto también funciona:

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

Para Rails 2.3, he utilizado:

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

Genial, parece más limpio. Tendré que actualizar nuestro código cuando lo actualicemos. –

11

Para Rails4

Rails.configuration.secret_token 
Rails.configuration.secret_key_base 

Para Rails3

Rails.configuration.secret_token 

Pero si por Rails2.x, como Don Parish mencionado

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

Me estoy poniendo nil para ambos. Esto no es normal, ¿verdad? He introducido un archivo 'config/secrets.yml' hace unos días, ¿quizás no se lee? –

+1

Los secretos agregados a ese archivo son accesibles a través de 'Rails.application.secrets'. – zenw0lf

0

para los carriles 3, Rails.configuration es igual a Rails.application.config, por lo Rails.configuration.secret_token actúa igual que lo choonkeat proporcionado .

Cuestiones relacionadas