ruby-on-rails - Ruby Rack 中间件从反向代理丢失 warden session

标签 ruby-on-rails devise proxy rack warden

我有一个 Rails 应用程序,它使用 devise 来验证用户,然后在调用 sinatra 应用程序之前由中间件检查 session /管理员用户,我的 config.ru 在下面。

这在直接从服务器请求应用程序时效果很好,例如 https://server1.com/tar

但是如果我通过反向代理请求相同的 URL,例如 https://server2.com/tar中间件应用程序查找 env['warden'].user 并返回 nil。

当请求通过反向代理时,env['warden'].user 无法再从 check_permission.rb(如下)访问。

我已经包含了中间件从 server1(无代理)和 server2(代理)接收到的请求的差异 - 长字符串已用“...”缩短

任何帮助都会很棒

config.ru

require ::File.expand_path('../config/environment',  __FILE__)
require 'sinatra_tar'

appurl = ENV['RAILS_RELATIVE_URL_ROOT'] || '/'

map appurl do
  run Rails.application
end

map "#{appurl}/tar" do
  use RailsEnvConfigMiddleware

  use ActionDispatch::Session::CookieStore, :key => ENV['SESSION_STORE'] + '_session',
  :path => '/', :secret => ENV['SECRET_KEY_BASE']

  use Warden::Manager do |manager|
    manager.failure_app = WardenFailure
    manager.default_scope = Devise.default_scope
  end

  use CheckPermission
  run Sinatra::Application
end

check_permission.rb

class CheckPermission
  def initialize(app)
    @app = app
  end

  def call(env)
    @app.call env
    if !env['warden'].nil? && !env['warden'].user.nil?
      user = env['warden'].user
      Log.info "Found warden user=#{user}"
    end
  end
end

请求 server1 diff(无代理)

"HTTP_X_REAL_IP"=>"140.251.30.49",
"HTTP_REFERER"=>"https://server1.com/pubshare_staging/data_browser",
"HTTP_COOKIE"=>"_pubshare_pubshare_staging_session=aTl...",
"rack.hijack"=>#<Puma::Client:0x3fc1c37d9834 @ready=true>,
"rack.session"=>#<ActionDispatch::Request::Session:0x7f8386fb28e8 not yet loaded>,
"rack.session.options"=>#<ActionDispatch::Request::Session::Options:0x007f8386fb2898 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}>,
"warden"=>Warden::Proxy:70101441025040 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure},
"rack.logger"=>#<Logger:0x007f8386f872d8 @progname=nil, @level=1, @default_formatter=#<Logger::Formatter:0x007f8386f872b0 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x007f8386f87260 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x007f8386f87238 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x007f8386f871e8>>>>,

"HTTP_X_REAL_IP"=>"140.251.30.49",
"HTTP_REFERER"=>"https://server1.com/pubshare_staging/data_browser",
"HTTP_COOKIE"=>"_pubshare_pubshare_staging_session=aTl...",
"rack.hijack"=>#<Puma::Client:0x3fc1c37d9834 @ready=true>,
"rack.session"=>#<ActionDispatch::Request::Session:0x007f8386fb28e8 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={"session_id"=>"5c72943e6df4095ef08ac9c7c65c6f4e",
"warden.user.user.key"=>[[2],
"$2a$10$Y46GsGR.nGaWDWfFYnCA4e"],
"warden.user.user.session"=>{"last_request_at"=>1453684735},
"_csrf_token"=>"nzR6FefPfQ3hXyJ7oKvNoJUIpzjYl8nOv6yhhlvU+88="}, @loaded=true, @exists=true>,
"rack.session.options"=>#<ActionDispatch::Request::Session::Options:0x007f8386fb2898 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612...", :id=>"5c72943e6df4095ef08ac9c7c65c6f4e"}>,
"warden"=>Warden::Proxy:70101441025040 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure},
"sinatra.commonlogger"=>true,
"rack.logger"=>#<Logger:0x007f8386d94ae8 @progname=nil, @level=1, @default_formatter=#<Logger::Formatter:0x007f8386d94ac0 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x007f8386d94a70 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x007f8386d94a48 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x007f8386d949f8>>>>,
"rack.request.query_string"=>"",
"rack.request.query_hash"=>{},
"sinatra.route"=>"GET /:downloadable_id/:path/:dataset_id/:project_id/:sample_name/*.fastq.gz",
"rack.request.cookie_hash"=>{"_pubshare_pubshare_staging_session"=>"aTl..."},
"rack.request.cookie_string"=>"_pubshare_pubshare_staging_session=aTl...",
"action_dispatch.cookies"=>#<ActionDispatch::Cookies::CookieJar:0x007f8386f5c998 @key_generator=#<ActiveSupport::CachingKeyGenerator:0x00000004beeae8 @key_generator=#<ActiveSupport::KeyGenerator:0x00000004beebb0 @secret="ENV['SECRET_KEY_BASE']", @iterations=1000>, @cache_keys=#<ThreadSafe::Cache:0x00000004bee7a0 @backend={"signed_global_ids64"=>"\xF..."}, @default_proc=nil>>, @set_cookies={}, @delete_cookies={}, @host="server1.com", @secure=true, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @cookies={"_pubshare_pubshare_staging_session"=>"aTl..."}, @committed=false, @encrypted=#<ActionDispatch::Cookies::EncryptedCookieJar:0x007f8386f5c268 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007f8386f5c998 ...>, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @encryptor=#<ActiveSupport::MessageEncryptor:0x007f8386f5c100 @secret="e\x...", @cipher="aes-256-cbc", @verifier=#<ActiveSupport::MessageVerifier:0x007f8386f5c038 @secret="\xC...", @digest="SHA1", @serializer=ActiveSupport::MessageEncryptor::NullSerializer>, @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>, @signed_or_encrypted=#<ActionDispatch::Cookies::EncryptedCookieJar:0x007f8386f5c268 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007f8386f5c998 ...>, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @encryptor=#<ActiveSupport::MessageEncryptor:0x007f8386f5c100 @secret="e\x...", @cipher="aes-256-cbc", @verifier=#<ActiveSupport::MessageVerifier:0x007f8386f5c038 @secret="\xCEGz\vNo\x87F\x9E\xD8\x1A>w:^?\xD4\x90\xD7/\xD9/,\x88i \x0F\x96&\xBEz\x06\xA9K\xB6\x8C5\xB6\e\x04\xCE\xE8l*\x87\xB0,3+\xBD72V\xE7\x15MW\xFBO\x9D'\xCB\xD2\xC1", @digest="SHA1", @serializer=ActiveSupport::MessageEncryptor::NullSerializer>, @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>>,
"action_dispatch.request.unsigned_session_cookie"=>{"session_id"=>"5c72943e6df4095ef08ac9c7c65c6f4e",
"warden.user.user.key"=>[[2],
"$2a$10$Y46GsGR.nGaWDWfFYnCA4e"],
"warden.user.user.session"=>{"last_request_at"=>1453684735},
"_csrf_token"=>"nzR6FefPfQ3hXyJ7oKvNoJUIpzjYl8nOv6yhhlvU+88="}

请求 server2 diff(代理)

"HTTP_X_REAL_IP"=>"157.139.217.14",
"HTTP_REFERER"=>"https://server2.com/pubshare_staging/data_browser",
"HTTP_COOKIE"=>"_pubshare_pubshare_staging_session=ZFd...",
"HTTP_X_FORWARDED_FOR"=>"140.251.30.49",
"HTTP_X_FORWARDED_HOST"=>"server2.com",
"HTTP_X_FORWARDED_SERVER"=>"server2.com",
"rack.hijack"=>#<Puma::Client:0x3fc1c3969b68 @ready=true>,
"rack.session"=>#<ActionDispatch::Request::Session:0x007f83872d2a28 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={}, @loaded=true, @exists=nil>,
"rack.session.options"=>#<ActionDispatch::Request::Session::Options:0x007f83872d29d8 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612...", :id=>"b91f3dc2220bace810524ed4400f6150"}>,
"warden"=>Warden::Proxy:70101442663600 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure},
"rack.logger"=>#<Logger:0x007f83872d2208 @progname=nil, @level=1, @default_formatter=#<Logger::Formatter:0x007f83872d21e0 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x007f83872d2190 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x007f83872d2168 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x007f83872d2118>>>>,
"rack.request.cookie_hash"=>{"_pubshare_pubshare_staging_session"=>"ZFd..."},
"rack.request.cookie_string"=>"_pubshare_pubshare_staging_session=ZFd...",
"action_dispatch.cookies"=>#<ActionDispatch::Cookies::CookieJar:0x007f83872d1c40 @key_generator=#<ActiveSupport::CachingKeyGenerator:0x00000004beeae8 @key_generator=#<ActiveSupport::KeyGenerator:0x00000004beebb0 @secret="ENV['SECRET_KEY_BASE']", @iterations=1000>, @cache_keys=#<ThreadSafe::Cache:0x00000004bee7a0 @backend={"signed_global_ids64"=>"\xF...",
"signed encrypted cookie64"=>"\xC..."}, @default_proc=nil>>, @set_cookies={}, @delete_cookies={}, @host="server2.com", @secure=true, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @cookies={"_pubshare_pubshare_staging_session"=>"ZFd..."}, @committed=false, @encrypted=#<ActionDispatch::Cookies::EncryptedCookieJar:0x007f83872d14c0 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007f83872d1c40 ...>, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @encryptor=#<ActiveSupport::MessageEncryptor:0x007f83872d1358 @secret="e\x...", @cipher="aes-256-cbc", @verifier=#<ActiveSupport::MessageVerifier:0x007f83872d1290 @secret="\xC...", @digest="SHA1", @serializer=ActiveSupport::MessageEncryptor::NullSerializer>, @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>, @signed_or_encrypted=#<ActionDispatch::Cookies::EncryptedCookieJar:0x007f83872d14c0 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007f83872d1c40 ...>, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @encryptor=#<ActiveSupport::MessageEncryptor:0x007f83872d1358 @secret="e\x...", @sign_secret="\xCEGz\vNo\x87F\x9E\xD8\x1A>w:^?\xD4\x90\xD7/\xD9/,\x88i \x0F\x96&\xBEz\x06\xA9K\xB6\x8C5\xB6\e\x04\xCE\xE8l*\x87\xB0,3+\xBD72V\xE7\x15MW\xFBO\x9D'\xCB\xD2\xC1", @cipher="aes-256-cbc", @verifier=#<ActiveSupport::MessageVerifier:0x007f83872d1290 @secret="\xCEGz\vNo\x87F\x9E\xD8\x1A>w:^?\xD4\x90\xD7/\xD9/,\x88i \x0F\x96&\xBEz\x06\xA9K\xB6\x8C5\xB6\e\x04\xCE\xE8l*\x87\xB0,3+\xBD72V\xE7\x15MW\xFBO\x9D'\xCB\xD2\xC1", @digest="SHA1", @serializer=ActiveSupport::MessageEncryptor::NullSerializer>, @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>>,
"action_dispatch.request.unsigned_session_cookie"=>{"session_id"=>"b91f3dc2220bace810524ed4400f6150",
"warden.user.user.key"=>[[2],
"$2a$10$Y46GsGR.nGaWDWfFYnCA4e"],
"warden.user.user.session"=>{"last_request_at"=>1453684930},
"_csrf_token"=>"sY2HCre1HnZP05TEAsBZ4C8jHi9z2eIipXG2s4YYX2s="},

"HTTP_X_REAL_IP"=>"157.139.217.14",
"HTTP_REFERER"=>"https://server2.com/pubshare_staging/data_browser",
"HTTP_COOKIE"=>"_pubshare_pubshare_staging_session=ZFd...",
"HTTP_X_FORWARDED_FOR"=>"140.251.30.49",
"HTTP_X_FORWARDED_HOST"=>"server2.com",
"HTTP_X_FORWARDED_SERVER"=>"server2.com",
"rack.hijack"=>#<Puma::Client:0x3fc1c3969b68 @ready=true>,
"rack.session"=>#<ActionDispatch::Request::Session:0x007f83872d2a28 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={}, @loaded=true, @exists=nil>,
"rack.session.options"=>#<ActionDispatch::Request::Session::Options:0x007f83872d29d8 @by=#<ActionDispatch::Session::CookieStore:0x00000005b420a8 @app=#<Warden::Manager:0x00000005b42170 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure}, @app=#<CheckPermission:0x00000005b42198 @app=Sinatra::Application>>, @default_options={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}, @key="_pubshare_pubshare_staging_session", @cookie_only=true>, @env={...}, @delegate={:path=>"/", :domain=>:all, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :secret=>"612..."}>,
"warden"=>Warden::Proxy:70101442663600 @config={:default_scope=>:user, :scope_defaults=>{}, :default_strategies=>{}, :intercept_401=>true, :failure_app=>WardenFailure},
"rack.logger"=>#<Logger:0x007f83867d2970 @progname=nil, @level=1, @default_formatter=#<Logger::Formatter:0x007f83867d2948 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x007f83867d28f8 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x007f83867d28d0 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x007f83867d2880>>>>,
"rack.request.cookie_hash"=>{"_pubshare_pubshare_staging_session"=>"ZFd..."},
"rack.request.cookie_string"=>"_pubshare_pubshare_staging_session=ZFd...",
"action_dispatch.cookies"=>#<ActionDispatch::Cookies::CookieJar:0x007f83872d1c40 @key_generator=#<ActiveSupport::CachingKeyGenerator:0x00000004beeae8 @key_generator=#<ActiveSupport::KeyGenerator:0x00000004beebb0 @secret="ENV['SECRET_KEY_BASE']", @iterations=1000>, @cache_keys=#<ThreadSafe::Cache:0x00000004bee7a0 @backend={"signed_global_ids64"=>"\xF..."}, @default_proc=nil>>, @set_cookies={}, @delete_cookies={}, @host="server2.com", @secure=true, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @cookies={"_pubshare_pubshare_staging_session"=>"ZFd..."}, @committed=false, @encrypted=#<ActionDispatch::Cookies::EncryptedCookieJar:0x007f83872d14c0 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007f83872d1c40 ...>, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @encryptor=#<ActiveSupport::MessageEncryptor:0x007f83872d1358 @secret="e\x...", @cipher="aes-256-cbc", @verifier=#<ActiveSupport::MessageVerifier:0x007f83872d1290 @secret="\xCEGz\vNo\x87F\x9E\xD8\x1A>w:^?\xD4\x90\xD7/\xD9/,\x88i \x0F\x96&\xBEz\x06\xA9K\xB6\x8C5\xB6\e\x04\xCE\xE8l*\x87\xB0,3+\xBD72V\xE7\x15MW\xFBO\x9D'\xCB\xD2\xC1", @digest="SHA1", @serializer=ActiveSupport::MessageEncryptor::NullSerializer>, @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>, @signed_or_encrypted=#<ActionDispatch::Cookies::EncryptedCookieJar:0x007f83872d14c0 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007f83872d1c40 ...>, @options={:signed_cookie_salt=>"signed cookie", :encrypted_cookie_salt=>"encrypted cookie", :encrypted_signed_cookie_salt=>"signed encrypted cookie", :secret_token=>nil, :secret_key_base=>"ENV['SECRET_KEY_BASE']", :upgrade_legacy_signed_cookies=>false, :serializer=>:json, :digest=>nil}, @encryptor=#<ActiveSupport::MessageEncryptor:0x007f83872d1358 @secret="e\x...", @sign_secret="\xC...", @cipher="aes-256-cbc", @verifier=#<ActiveSupport::MessageVerifier:0x007f83872d1290 @secret="\xC...", @digest="SHA1", @serializer=ActiveSupport::MessageEncryptor::NullSerializer>, @serializer=ActiveSupport::MessageEncryptor::NullSerializer>>>,
"action_dispatch.request.unsigned_session_cookie"=>{"session_id"=>"b91f3dc2220bace810524ed4400f6150",
"warden.user.user.key"=>[[2],
"$2a$10$Y46GsGR.nGaWDWfFYnCA4e"],
"warden.user.user.session"=>{"last_request_at"=>1453684930},
"_csrf_token"=>"sY2HCre1HnZP05TEAsBZ4C8jHi9z2eIipXG2s4YYX2s="},
"rack.request.query_string"=>"",
"rack.request.query_hash"=>{},
"sinatra.route"=>"GET /:downloadable_id/:path/:dataset_id/:project_id/:sample_name/*.fastq.gz"}

最佳答案

我刚刚了解到 sinatra/rack-protection .将下面的行添加到我的 sinatra 应用程序解决了这个问题

set :protection, :except => :ip_spoofing

关于ruby-on-rails - Ruby Rack 中间件从反向代理丢失 warden session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34998877/

相关文章:

javascript - 由多个外部元素触发的主干 View

devise - Rails 7.0 应用程序中未显示尝试从设备登录时的错误消息

nginx - 使用Nginx作为Docker的代理

javascript - 我正在使用 Rails Admin gem,但我无法在不重新加载页面的情况下发布我的产品

ruby-on-rails - cattr_accessor 默认值语法

ruby-on-rails - Rails Devise - 当前用户为零

ruby-on-rails - 了解 twitter gem 自述文件

c - 在代理中,在将浏览器请求发送到主机之前对其进行格式化

proxy - ClickOnce 不遵守本地主机的安装文件夹

ruby-on-rails - Globalize3 - 尝试将翻译添加到现有模型时出现迁移错误