Access Rails 3 сессии из стойки? - PullRequest
2 голосов
/ 11 мая 2010

Мне удалось сделать следующее в Rails 2.3.5 для доступа к атрибутам, которые я установил в сеансе, из моего приложения Rails. Теперь в Rails 3 env["rack.session"] равно nil. Как мне сделать то же самое в Rails 3?

class CallbackFilter
  def initialize(app)
    @app = app
  end

  def call(env)
    unless env["rack.session"][:oauth_callback_method].blank?
      env["REQUEST_METHOD"] = env["rack.session"].delete(:oauth_callback_method).to_s.upcase
    end
    @app.call(env)
  end
end

Ответы [ 2 ]

4 голосов
/ 11 мая 2010

Это потому, что я поместил use CallbackFilter в config.ru. Он должен быть помещен в config/application.rb примерно так:

config.middleware.use CallbackFilter

В противном случае среда не выглядела бы так, как если бы она была синхронизирована ...

1 голос
/ 25 марта 2011

Существует еще один «грязный» способ синхронизации (для тех, кто по каким-то причинам не может интегрировать стоечное приложение в рельсы).

Вы должны установить: key и: secret одинаковые значения в Rails и Rack.

В рельсах :secret назначается как ChatApp::Application.config.secret_token и обычно настраивается в initializers / secret_token.rb, а в session_store.rb есть опция :key для YourApp::Application.config.session_store). Так что в итоге это будет что-то вроде:

в Rack::Builder.new блоке:

use Rack::Session::Cookie, :key => '_your_app_session',
                               :path => '/',
                               :secret => 'secret_more_than_30_dig'

Инициализаторы / session_store.rb

YourApp::Application.config.session_store :cookie_store, :key => '_your_app_session',
                                                          :path => '/'

Инициализаторы / secret_token.rb

YourApp::Application.config.secret_token = 'secret_more_than_30_dig'

теперь вы сможете получить к нему доступ. request.env['rack.session']

...