2012-02-02 3 views
4

Sinatra Project에서 작업 중이며 나중에 사용할 수 있도록 세션에서 일부 변수를 설정했습니다.Sinatra Middleware에서 세션 액세스

내가 도움이 필요한 시나리오는 미들웨어 클래스에서 세션 개체에 액세스하려고한다는 것입니다. 나는 교장을 인증에 사용하고 있습니다.

나는 미들웨어 클래스의 아래에 비슷한 싶지

:

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

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

그 일에 대한 가능성이 있습니까?

생각하십니까?

답변

8

랙 미들웨어에서는 Sinatra의 session 방법을 사용할 수 없지만 env 해시를 통해 세션에 직접 액세스 할 수 있습니다.

(use MyMiddleware 전에해야시나 enable :sessions에 있도록) 미들웨어 전에 세션 미들웨어가 있는지, 다음 세션 키 '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 객체를 사용하는 것을 선호 할 수도있다

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

감사 매트 : 더 쉽게 env 해시의 세션과 다른 부분에 액세스 할 수 있습니다. 그 결과를 알려 줄 것입니다. 건배. –

관련 문제