Probleme mit ActiveSupport::MessageEncryptor::InvalidMessage im Plugin

Das Update auf 2.9.0.beta5 verursacht ein Problem mit meinem Dashboard-Plugin. Etwas löst einen Fehler in einer Ansicht des Plugins aus:

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'

Dies scheint nur in der Index-Ansicht meines Plugins aufzutreten, nicht auf anderen Seiten des Plugins oder in Discourse. Ich bin mir nicht sicher, wo ich suchen soll. Ich bin froh, dass ich das Upgrade zuerst auf meiner Staging-Site durchgeführt habe!

Das Obige deutete für mich darauf hin, dass dies mit dem Chat-Plugin zu tun hat, aber es tritt auf meiner Dev-Instanz auf, ohne dass Chat installiert ist.

Wow, und wenn ich Google nach ActiveSupport::MessageEncryptor::InvalidMessage "fast_attributes" durchsuche, gibt es nur dieses Thema!

1 „Gefällt mir“

Mein Problem scheint mit config/master.key zusammenzuhängen (https://stackoverflow.com/questions/54277392/rails-activesupportmessageencryptorinvalidmessage), aber ich verstehe nicht, warum es bei diesem Upgrade aufgetreten ist.

1 „Gefällt mir“

Wir haben auf Rails 7 aktualisiert, das ist wahrscheinlich die Ursache.

1 „Gefällt mir“

Danke, @gerhard!

Auf Upgrading Ruby on Rails — Ruby on Rails Guides finde ich

(aber da steht Rails 7.1?)

Gibt es eine Möglichkeit, die Sie aus dem Stegreif kennen, wie ich diese Änderung in meinem bestehenden Plugin mit einer offensichtlichen Zeile in meiner plugin.rb ignorieren kann, sobald man sie kennt?

Oder muss ich vielleicht herausfinden, was das bedeutet.

EDIT: Aber unter dev ist das Hinzufügen dieser Zeile zu config/application.rb keine magische Lösung.

Entschuldigung. Ich habe weitergelesen:

Vielleicht löst das also mein unmittelbares Problem. Nochmals vielen Dank für Ihre Hilfe! Vielleicht verstehe ich es diesmal.


Nun, der Schlüssel, den ich für Rails 6 und Rails 7 generiere, sieht so aus:

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

aber sie verschlüsseln die Dinge unterschiedlich. Ich hatte gehofft, dass die hash_digest_class das Problem ist, aber sie sieht bei beiden zumindest gleich aus, aber der verschlüsselte String ist anders. :crying_cat_face:

1 „Gefällt mir“

Oh. Mist. Nein, das ist es nicht. Meine Produktionsseite, die funktioniert, läuft auf 7.0.3 und die Staging-Seite, die kaputt ist, läuft ebenfalls auf 7.0.3. Sie verschlüsselt die Dinge anders. Ich kann nicht erkennen, und weiß auch nicht, wie ich erkennen soll, ob der Serializer anders ist oder die Verschlüsselung anders ist.

Inzwischen habe ich erfahren, dass 7.0 das Verschlüsseln von Feldern unterstützt, was mir erlauben würde, benutzerdefinierten Code zu entfernen, wenn ich nur herausfinden könnte, wie ich überhaupt an meine verschlüsselten API-Schlüssel komme. Oder vielleicht werde ich sie einfach löschen und neu generieren.

Aktuell erhalte ich Verschlüsselungen wie
=> "SUNBZlRURThEZjdVUG8wTzV1eWk0dz09LS1uRGVSQWtPRU9rc1ZCa1Y1d2pyeU5nPT0=--43eab316e6a9ebafc72d4982347abd9c7f6605db"

mit 2.9.0.beta4 sehen sie so aus: "FwL/GGvrDHOpQ1bnGiI=--kCLbUxMf/XeMaeWF--/feRN+/l1q3EFdKgyIo+7Q=="

Ich musste hier die alte Verschlüsselung hinzufügen:

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

Ich verstehe immer noch nicht, warum die beiden Instanzen, die beide angeblich 7.0.3 ausführen, unterschiedliche Ergebnisse liefern, aber ein gutes RTFM der Upgrade-Dokumente war eine große Hilfe. Danke, Gerhard! Es war der Anstoß, den ich brauchte.

1 „Gefällt mir“