我正在开发一个 Sinatra 项目,并在会话中设置了一些变量以供以后使用。
我需要帮助的场景是我想访问中间件类中的会话对象。我正在使用典狱长进行身份验证。
我想在 Middleware 类中做类似的事情:
class MyMiddleware
def initialize(app, options={})
@app = app
end
def call(env)
puts "#{session.inspect}"
end
end
有可能这样做吗?
想法?
你不能使用 Sinatra 的session
Rack中间件中的方法,但是可以直接通过env
hash.
确保会话中间件位于您的中间件之前(所以在 Sinatraenable :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 http://rack.rubyforge.org/doc/Rack/Request.html对象,以便更轻松地访问会话和其他部分env
hash:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)