在 Sinatra 中间件中访问会话

2023-12-27

我正在开发一个 Sinatra 项目,并在会话中设置了一些变量以供以后使用。

我需要帮助的场景是我想访问中间件类中的会话对象。我正在使用典狱长进行身份验证。

我想在 Middleware 类中做类似的事情:

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

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

有可能这样做吗?

想法?


你不能使用 Sinatra 的sessionRack中间件中的方法,但是可以直接通过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(使用前将#替换为@)

在 Sinatra 中间件中访问会话 的相关文章

随机推荐