2008-10-10 8 views
8

Je souhaite accéder par programme au secret de session Rails (je l'utilise pour générer un jeton de connexion).Quelle est la meilleure façon de lire le secret de session Rails?

Voici ce que je suis venu avec:

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

Ce retourne le secret de la session. Cependant, chaque fois que vous appelez ActionController :: Base.session il ajoute une autre entrée à un tableau si vous vous retrouvez avec quelque chose comme ceci:

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

Cela me paraît pas bon.

Existe-t-il un meilleur moyen d'accéder au secret de session?

Répondre

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

Merci, Jake.

Depuis le secret ne change pas en fonction de la demande ou l'action, cela fonctionne aussi:

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

Pour Rails 2.3, je l'ai utilisé:

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

Cool, qui a l'air plus propre. Je vais devoir mettre à jour notre code lors de la mise à niveau. –

11

Pour Rails4

Rails.configuration.secret_token 
Rails.configuration.secret_key_base 

Pour Rails3

Rails.configuration.secret_token 

Mais si pour Rails2.x, comme Don Parish mentionné

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

Je reçois zéro pour les deux. Ce n'est pas normal, n'est-ce pas? J'ai introduit un fichier 'config/secrets.yml' il y a quelques jours, peut-être n'est-il pas lu? –

+1

Les secrets ajoutés à ce fichier sont accessibles via 'Rails.application.secrets'. – zenw0lf

0

Pour Rails 3, Rails.configuration est à même Rails.application.config, donc Rails.configuration.secret_token agit comme ce choonkeat fourni .