مشكلة مع ActiveSupport::MessageEncryptor::InvalidMessage في المكون الإضافي

يؤدي التحديث إلى 2.9.0.beta5 إلى حدوث مشكلة في إضافة لوحة التحكم الخاصة بي. شيء ما يؤدي إلى حدوث خطأ في طريقة عرض واحدة للإضافة:

Started GET "/pfaffmanager/servers" for 73.147.117.173 at 2022-06-14 17:53:31 +0000
Processing by Pfaffmanager::ServersController#index as HTML
  Rendered default/empty.html.erb within layouts/application (Duration: 0.1ms | Allocations: 29)
  Rendered layout layouts/application.html.erb (Duration: 21.6ms | Allocations: 7109)
Completed 200 OK in 142ms (Views: 23.0ms | ActiveRecord: 0.0ms | Allocations: 37464)
Started GET "/chat/chat_channels.json" for 73.147.117.173 at 2022-06-14 17:53:31 +0000
Processing by DiscourseChat::ChatChannelsController#index as JSON
Started GET "/presence/get?channels%5B%5D=%2Fchat-user%2Fchat%2F1&channels%5B%5D=%2Fchat-user%2Fcore%2F1" for 73.147.117.173 at 2022-06-14 17:53:31 +0000
Processing by PresenceController#get as JSON
  Parameters: {"channels"=>["/chat-user/chat/1", "/chat-user/core/1"]}
Completed 200 OK in 44ms (Views: 1.9ms | ActiveRecord: 0.0ms | Allocations: 5134)
Started GET "/pfaffmanager/servers" for 73.147.117.173 at 2022-06-14 17:53:31 +0000
Completed 200 OK in 94ms (Views: 0.3ms | ActiveRecord: 0.0ms | Allocations: 22124)
Processing by Pfaffmanager::ServersController#index as JSON
Completed 500 Internal Server Error in 113ms (ActiveRecord: 0.0ms | Allocations: 15487)
ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)
(eval):9:in `_fast_attributes'
app/controllers/application_controller.rb:543:in `render_json_dump'
app/controllers/application_controller.rb:415:in `block in with_resolved_locale'
app/controllers/application_controller.rb:415:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:368:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:202:in `call'

يبدو أن هذا يحدث فقط في طريقة العرض الرئيسية للإضافة الخاصة بي، وليس في أي صفحات أخرى في الإضافة أو Discourse. لست متأكدًا أين يجب أن أبحث. أنا سعيد جدًا لأنني قمت بتشغيل الترقية على موقع الاختبار الخاص بي أولاً!

ما سبق أشار إلي بأن هذا يتعلق بإضافة الدردشة، ولكنه يحدث على نسخة التطوير الخاصة بي بدون تثبيت الدردشة.

يا إلهي، والبحث في جوجل عن ActiveSupport::MessageEncryptor::InvalidMessage "fast_attributes" يعيد فقط هذا الموضوع!

إعجاب واحد (1)

تبدو مشكلتي متعلقة بـ config/master.key (https://stackoverflow.com/questions/54277392/rails-activesupportmessageencryptorinvalidmessage)، لكنني لا أفهم لماذا بدأ حدوث ذلك في هذا التحديث.

إعجاب واحد (1)

لقد قمنا بالتحديث إلى Rails 7، لذا فمن المحتمل أن يكون هذا هو السبب.

إعجاب واحد (1)

شكرًا، @gerhard!

إذًا في Upgrading Ruby on Rails — Ruby on Rails Guides

أجد

(ولكن هذا يقول Rails 7.1؟)

هل هناك طريقة تعرفها بشكل مباشر يمكنني بها تجاهل هذا التغيير في المكون الإضافي الحالي الخاص بي مع سطر واضح بمجرد معرفته في plugin.rb الخاص بي؟

أو ربما سأضطر إلى معرفة ما يعنيه هذا.

تعديل: ولكن على dev فإن إضافة هذا السطر إلى config/application.rb ليس حلاً سحريًا.

آسف. قرأت المزيد:

لذا ربما سيحل هذا مشكلتي الفورية. شكرًا مرة أخرى على مساعدتك! ربما سأفهمها هذه المرة.


حسنًا، المفتاح الذي أقوم بإنشائه لكل من rails 6 و rails 7 يبدو كالتالي:

#<ActiveSupport::KeyGenerator:0x000055870212d4f8 @hash_digest_class=OpenSSL::Digest::SHA1, @iterations=65536, @secret="my-big-secret">

لكنهما يقومان بتشفير الأشياء بشكل مختلف. كنت آمل أن تكون hash_digest_class هي المشكلة، ولكنها على الأقل تبدو كما هي في كليهما، ولكن السلسلة المشفرة مختلفة. :crying_cat_face:

إعجاب واحد (1)

أوه. اللعنة. لا، هذا ليس هو السبب. موقعي الإنتاجي الذي يعمل هو على 7.0.3 والموقع التجريبي المعطل هو أيضًا على 7.0.3. إنه يقوم بتشفير الأشياء بشكل مختلف. لا يمكنني معرفة، ولا أعرف كيف أعرف، ما إذا كان المحلل مختلفًا أم أن الشفرة مختلفة.

في هذه الأثناء، علمت أن 7.0 يدعم تشفير الحقول، مما سيتيح لي التخلص من بعض التعليمات البرمجية المخصصة إذا تمكنت فقط من معرفة كيفية الوصول إلى مفاتيح API المشفرة الخاصة بي على الإطلاق. أو ربما سأقوم فقط بحذفها وإعادة إنشائها.

حتى وقت قريب، كنت أحصل على تشفيرات مثل
=> "SUNBZlRURThEZjdVUG8wTzV1eWk0dz09LS1uRGVSQWtPRU9rc1ZCa1Y1d2pyeU5nPT0=--43eab316e6a9ebafc72d4982347abd9c7f6605db"

مع 2.9.0.beta4 تبدو مثل "FwL/GGvrDHOpQ1bnGiI=--kCLbUxMf/XeMaeWF--/feRN+/l1q3EFdKgyIo+7Q=="

كان عليّ إضافة التشفير القديم هنا:

k = ActiveSupport::MessageEncryptor.new(KEY,  cipher: "aes-256-cbc")

لا أزال لا أفهم لماذا يوجد نتيجتان مختلفتان في مثيلين يدعي كلاهما أنهما يعملان على الإصدار 7.0.3، لكن قراءة دليل الترقية كانت مساعدة كبيرة. شكرًا لك يا جيرهارد! لقد كانت الدفعة التي احتجتها.

إعجاب واحد (1)