2010-05-10 51 views
2

我能夠在Rails 2.3.5中執行以下操作來訪問我在Rails應用程序中設置的會話屬性。現在在Rails 3中,env["rack.session"]nil。我如何在Rails 3中做同樣的事情?從機架訪問Rails 3 Session?

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

這是因爲我把use CallbackFilter放在config.ru。它應該被放置在config/application.rb像這樣:

config.middleware.use CallbackFilter 

否則,環境看起來並不像他們在同步...

1

還有一個「髒」的方式來syncronize(對於那些誰不能出於某些原因將機架應用整合到導軌中)。

您應該在Rails和Rack中將key和secret設置爲相同的值。

在導軌:secret分配爲ChatApp::Application.config.secret_token和通常在初始化/配置secret_token.rb,並且在session_store.rb還有爲YourApp::Application.config.session_store一個:key選項)。那麼到底它會是這樣的:在

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

+0

它適合我。我整合了Rails和Sinatra。兩者都使用相同的cookie進行用戶身份驗證。謝謝! – msa7 2013-11-19 11:22:53