Has*_*han 4 ruby session rack sinatra warden
我正在研究Sinatra项目,并在会话中设置了一些变量供以后使用.
我需要帮助的场景是我想访问中间件类中的会话对象.我正在使用warden进行身份验证.
我想在Middleware类中做类似的事情:
class MyMiddleware
def initialize(app, options={})
@app = app
end
def call(env)
puts "#{session.inspect}"
end
end
Run Code Online (Sandbox Code Playgroud)
这样做有可能吗?
思考?
您不能session在Rack中间件中使用Sinatra的方法,但您可以通过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
Run Code Online (Sandbox Code Playgroud)
您可能更喜欢使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |