I cookie di sessione sono crittografati utilizzando una chiave segreta generata casualmente che, per impostazione predefinita, è memorizzata in Redis. I dati di Redis non sono inclusi nei backup, quindi quando ripristini il sito su un nuovo server viene generata una nuova chiave segreta.
Puoi impostare manualmente la chiave segreta utilizzando una variabile d’ambiente DISCOURSE_SECRET_KEY_BASE nel tuo file app.yml. Quindi potresti provare qualcosa del genere per preservare le sessioni:
-
Sul tuo server esistente, apri la console e trova la chiave segreta da Redis
pry(main)> GlobalSetting.safe_secret_key_base => "5fb9dc98be368599e0a..." -
Aggiungi
DISCOURSE_SECRET_KEY_BASEalla sezioneenv:del tuo file app.yml sul vecchio server, utilizzando il valore trovato al punto (1), e ricostruisci l’app. In teoria, se tutto è andato bene, Discourse dovrebbe ora utilizzare il valore presente nell’app.yml e le sessioni degli utenti rimarranno attive. Puoi verificare che la variabile d’ambiente venga utilizzata eseguendoGlobalSetting.secret_key_base -
Assicurati che l’app.yml sul nuovo server contenga lo stesso
SECRET_KEY_BASE. Quando ripristini il backup, le sessioni degli utenti dovrebbero rimanere attive.
Non ho testato questo flusso, quindi se prevedi di utilizzarlo per un forum di produzione assicurati di provarlo prima!
Nota a margine: non dovresti assolutamente condividere la chiave segreta tra più istanze di Discourse. La possessione della chiave segreta permetterebbe a qualcuno di decrittografare e modificare il proprio cookie di sessione su un sito, con conseguenze di sicurezza molto gravi.