2012-02-02 5 views
4

私はSinatraプロジェクトに取り組んでおり、後で使用するためにセッションでいくつかの変数を設定しました。Sinatraミドルウェアでのセッションへのアクセス

私が助けが必要なシナリオは、ミドルウェアクラスのセッションオブジェクトにアクセスしたいということです。私は認証のために監視員を使用しています。

私はミドルウェアクラスに以下の類似した何かをしたい:

class MyMiddleware 
    def initialize(app, options={}) 
     @app = app 
    end 

    def call(env) 
     puts "#{session.inspect}" 
    end 
end 

はそれを行うための可能性はありますか?

思考?

答えて

8

RackミドルウェアでSinatraのsessionメソッドを使用することはできませんが、envハッシュを通じてセッションに直接アクセスできます。

セッションミドルウェアは、ミドルウェアの前にあることを確認します(そうシナトラenable :sessionsuse MyMiddleware前にする必要があります)、その後、セッション鍵'rack.session'を介して利用できます。

class MyMiddleware 
    def initialize(app, options={}) 
    @app = app 
    end 

    def call(env) 
    puts env['rack.session'].inspect 
    @app.call(env) 
    end 
end 

あなたがにRack::Requestオブジェクトを使用することを好むかもしれませんセッションや他の部分のenvハッシュへのアクセスを容易にする:

def call(env) 
    request = Rack::Request.new(env) 
    puts request.session.inspect 
    # other uses of request without needing to know what keys of env you need 
    @app.call(env) 
end 
+0

ありがとうございました。それはショットを与え、結果を知らせるでしょう。乾杯。 –

関連する問題