加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 在Sinatra Middleware中访问会话

发布时间:2020-12-17 02:53:47 所属栏目:百科 来源:网络整理
导读:我正在研究Sinatra项目,并在会话中设置了一些变量供以后使用. 我需要帮助的场景是我想访问中间件类中的会话对象.我正在使用warden进行身份验证. 我想在Middleware类中做类似的事情: class MyMiddleware def initialize(app,options={}) @app = app end def
我正在研究Sinatra项目,并在会话中设置了一些变量供以后使用.

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

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

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

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

这样做有可能吗?

思考?

解决方法

您不能在Rack中间件中使用Sinatra的会话方法,但您可以通过env哈希直接访问会话.

确保会话中间件位于中间件之前(因此在Sinatra中启用:会话应在使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读