Я хотел бы получить программный доступ к секрету сеанса Rails (я использую его для генерации токена входа).
Вот что я придумал:
ActionController::Base.session.first[:secret]
Это возвращает секрет сеанса. Однако каждый раз, когда вы вызываете ActionController :: Base.session, он добавляет еще одну запись в массив, поэтому вы получаете что-то вроде этого:
[{:session_key=>"_new_app_session", :secret=>"totally-secret-you-guys"}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
Мне это кажется бесполезным.
Есть ли лучший способ получить доступ к секрету сеанса?





ActionController::Base.session_options_for(request,params[:action])[:secret]
Спасибо, Джейк.
Поскольку секрет не меняется в зависимости от запроса или действия, это также работает:
ActionController::Base.session_options_for(nil,nil)[:secret]
Для Rails 2.3 я использовал:
ActionController::Base.session_options[:secret]
Для Rails4
Rails.configuration.secret_token
Rails.configuration.secret_key_base
Для Rails3
Rails.configuration.secret_token
Но если для Rails2.x, как упоминал Дон Пэриш
ActionController::Base.session_options[:secret]
Я получаю ноль за оба. Это ведь ненормально? Я представил файл config/secrets.yml несколько дней назад, может он не читается?
Секреты, добавленные в этот файл, доступны через Rails.application.secrets.
Для Rails 3 Rails.configuration совпадает с Rails.application.config, поэтому Rails.configuration.secret_token действует так же, как и предоставленный choonkeat.
Круто, выглядит чище. При обновлении мне придется обновить ваш код.