2

我能够在 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
4

2 回答 2

4

这是因为我把use CallbackFilterin config.ru. 它应该config/application.rb像这样放置:

config.middleware.use CallbackFilter

否则环境看起来并不同步......

于 2010-05-11T00:20:16.487 回答
1

还有另一种“肮脏”的同步方式(对于那些由于某些原因无法将机架应用程序集成到导轨中的人)。

您应该在 Rails 和 Rack 中将 :key 和 :secret 设置为相同的值。

:secret在分配为并通常在 initializers/secret_token.rb 中配置的railsChatApp::Application.config.secret_token中,在 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']

于 2011-03-25T11:33:55.013 回答