# Problema con ActiveSupport::MessageEncryptor::InvalidMessage nel plugin

**URL:** https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957
**Category:** Development
**Created:** [14 Giugno 2022, 5:55pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957 "2022-06-14T17:55:42Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [14 Giugno 2022, 5:55pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957/1 "2022-06-14T17:55:42Z")

</div>

L’aggiornamento a 2.9.0.beta5 sta causando un problema con il mio plugin della dashboard. Qualcosa sta generando un errore in una visualizzazione del plugin:

```plaintext
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'

```

Sembra che questo accada solo nella visualizzazione index del mio plugin, non in altre pagine del plugin o di Discourse. Non sono sicuro di dove cercare. Sono contento di aver eseguito l’aggiornamento prima sul mio sito di staging!

Quanto sopra mi ha suggerito che questo ha a che fare con il plugin di chat, ma sta accadendo sulla mia istanza di sviluppo senza chat installata.

Wow, e cercare su Google `ActiveSupport::MessageEncryptor::InvalidMessage "fast_attributes"` restituisce solo questo argomento!

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [20 Giugno 2022, 5:36pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957/2 "2022-06-20T17:36:28Z")

</div>

Il mio problema sembra avere a che fare con `config/master.key` ([https://stackoverflow.com/questions/54277392/rails-activesupportmessageencryptorinvalidmessage](https://stackoverflow.com/questions/54277392/rails-activesupportmessageencryptorinvalidmessage)), ma non capisco perché abbia iniziato a verificarsi con questo aggiornamento.

---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [20 Giugno 2022, 5:54pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957/3 "2022-06-20T17:54:17Z")

</div>

Abbiamo aggiornato a Rails 7, quindi probabilmente è questa la causa.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [20 Giugno 2022, 6:09pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957/4 "2022-06-20T18:09:35Z")

</div>

Grazie, @gerhard!

Quindi, su [Upgrading Ruby on Rails — Ruby on Rails Guides](https://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#new-activesupport-messageencryptor-default-serializer)

trovo

> [@](#):
>
> A partire da Rails 7.1, il serializer predefinito utilizzato da `MessageEncryptor` è `JSON`. Questa offre un’alternativa più sicura al serializer predefinito attuale.
> 
> Il `MessageEncryptor` offre la possibilità di migrare il serializer predefinito da `Marshal` a `JSON`.  
> Se desideri ignorare questa modifica nelle applicazioni esistenti, imposta quanto segue: `config.active_support.default_message_encryptor_serializer = :marshal`.

(ma questo dice Rails 7.1?)

C’è un modo che conosci a memoria per ignorare questa modifica nel mio plugin esistente con una riga ovvia una volta che la conosci nel mio `plugin.rb`?

O forse dovrò capire cosa significa.

MODIFICA: ma su `dev` l’aggiunta di quella riga a `config/application.rb` non è una soluzione magica.

Scusa. Ho letto un po’ oltre:

> [@](#):
>
> #### [3.10 La classe digest del generatore di chiavi utilizzerà SHA256](https://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#key-generator-digest-class-changing-to-use-sha256)
> 
> La classe digest predefinita per il generatore di chiavi cambierà da SHA1 a SHA256. Questo ha conseguenze in qualsiasi messaggio crittografato generato da Rails, inclusi i cookie crittografati.
> 
> Per poter leggere messaggi utilizzando la vecchia classe digest è necessario registrare un rotatore.

Quindi forse questo risolverà il mio problema immediato. Grazie ancora per il tuo aiuto! Forse stavolta ci riuscirò.

* * *

Bene, la chiave che genero sia per rails 6 che per rails 7 appare così:

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

```

ma crittografano le cose in modo diverso. Speravo che `hash_digest_class` fosse il problema, ma almeno sembra che sia lo stesso su entrambi, ma la stringa crittografata è diversa. 😿

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [21 Giugno 2022, 1:49pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957/5 "2022-06-21T13:49:46Z")

</div>

> [@gerhard](#):
>
> Abbiamo aggiornato a Rails 7, quindi probabilmente è quella la causa.

Oh. Dannazione. No, non è quello. Il mio sito di produzione che funziona è su 7.0.3 e il sito di staging che non funziona è anch’esso su 7.0.3. Sta crittografando le cose in modo diverso. Non riesco a capire, e non so come capire, se è il serializzatore ad essere diverso o il cifrario ad essere diverso.

Nel frattempo, ho appreso che 7.0 supporta la crittografia dei campi, il che mi permetterà di eliminare del codice personalizzato se solo riuscissi a capire come accedere alle mie chiavi API crittografate. O forse le eliminerò e le rigenererò.

Al momento sto ottenendo crittografie come  
`=> "SUNBZlRURThEZjdVUG8wTzV1eWk0dz09LS1uRGVSQWtPRU9rc1ZCa1Y1d2pyeU5nPT0=--43eab316e6a9ebafc72d4982347abd9c7f6605db"`

con 2.9.0.beta4 assomigliano a `"FwL/GGvrDHOpQ1bnGiI=--kCLbUxMf/XeMaeWF--/feRN+/l1q3EFdKgyIo+7Q=="`

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [21 Giugno 2022, 2:46pm UTC](https://meta.discourse.org/t/trouble-with-activesupport-invalidmessage-in-plugin/229957/7 "2022-06-21T14:46:50Z")

</div>

Ho dovuto aggiungere la vecchia cifratura qui:

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

```

Ancora non capisco perché le due istanze che affermano entrambe di eseguire la 7.0.3 abbiano risultati diversi, ma una buona lettura della documentazione di aggiornamento è stata di grande aiuto. Grazie, Gerhard! Era la spinta di cui avevo bisogno.
