ruby-on-rails - Rails session_store 密钥更改
问题描述
即使在 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
即使进行此更改,用户仍应能够使用旧版本。
即使在部署之后,关于如何使旧密钥有效的任何想法?
解决方案
要使旧会话正常工作,您需要使应用程序从两个键中读取,但只写入新键。:hybrid
从编组会话切换到 json(模式)时,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'
推荐阅读
- bash - 在 ffmpeg 录制期间“读取”屏幕
- laravel - Laravel 在关系中具有类似条件
- javascript - Firebase 存储不是 vuejs 应用程序中的功能
- reactjs - 设置状态时 react-google-recaptcha 重新渲染
- python - Visual Studio Code 在使用数据查看器时出错:“查看数据需要 Python 包‘熊猫’”
- flutter - 在为 Android 运行颤振应用程序时出现此异常
- javascript - 为带有文件夹的网站制作通用页眉和页脚
- flutter - 在 MaterialApp builder 属性中返回多个小部件
- sql - 多部分的 INNER JOIN (select ) 问题中的 CROSS JOIN DATA
- python - python 程序,如果使用了,想打印 5 次尝试