5

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

ヘルプが必要なシナリオは、ミドルウェア クラスのセッション オブジェクトにアクセスすることです。認証にウォーデンを使用しています。

Middleware クラスで以下のようなことをしたい:

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

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

そうする可能性はありますか?

考え?

4

2 に答える 2

9

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

セッション ミドルウェアがミドルウェアの前にあることを確認してください (つまり、Sinatraでは のenable :sessions前にある必要がありますuse 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
于 2012-02-02T18:43:16.243 に答える