【问题标题】:Rails session_store key changeRails session_store 密钥更改
【发布时间】:2020-02-01 01:50:07
【问题描述】:

即使在对 session_store 键进行更改后,我也需要保留用户会话:

部署前:

MyApp::Application.config.session_store :active_record_store, key: '_abc_session'

部署后:

MyApp::Application.config.session_store :active_record_store, key: '_xyz_session'

即使在进行此更改后,用户仍应能够使用旧的key

知道如何使 old 密钥在部署后仍然有效吗?

【问题讨论】:

    标签: ruby-on-rails session-cookies


    【解决方案1】:

    要使旧会话正常工作,您需要让应用从两个键中读取,但只写入新键。从编组会话切换到 json(:hybrid 模式)时,rails 使用了这种方法

    应该这样做(尚未测试,您的机架版本也可能不同,因此最好提出您的变体):

    class MyHybridStore < ActionDispatch::Session::ActiveRecordStore
      # this lives in Rack::Session::Abstract::Persisted (this is modified from rack 2.1.2, yours may differ)
      def unpacked_cookie_data(request)
        request.fetch_header(RACK_SESSION_UNPACKED_COOKIE_DATA) do |k|
          # the trick:
          session_data = request.cookies[@key].presence || request.cookies['_abc_session']
    
          if @secrets.size > 0 && session_data
            session_data, _, digest = session_data.rpartition('--')
            session_data = nil unless digest_match?(session_data, digest)
          end
    
          request.set_header(k, coder.decode(session_data) || {})
        end
      end
    end
    
    MyApp::Application.config.session_store MyHybridStore, key: '_xyz_session'
    

    【讨论】:

    • key: 可以支持数组吗? key: ['_xyz_session', '_abc_session'] ?
    • @Vasfed 我在哪里可以找到有关此方法的更多信息?
    猜你喜欢
    • 2014-03-22
    • 2011-07-10
    • 2011-02-22
    • 2019-10-21
    • 2015-04-05
    • 2014-12-28
    • 2013-05-29
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多