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 CallbackFilterからですconfig.ruconfig/application.rb次のように配置する必要があります。

config.middleware.use CallbackFilter

そうしないと、環境が同期しているように見えませんでした...

于 2010-05-11T00:20:16.487 に答える
1

同期する別の「汚い」方法があります(何らかの理由でラックアプリをレールに統合できない人向け)。

Rails と Rack の両方で :key と :secret を同じ値に設定する必要があります。

: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']

于 2011-03-25T11:33:55.013 に答える