Les cookies de session sont chiffrés à l’aide d’une clé secrète générée aléatoirement, qui, par défaut, est stockée dans Redis. Les données Redis ne sont pas incluses dans une sauvegarde, de sorte qu’une nouvelle clé secrète est régénérée lorsque vous restaurez le site sur un nouveau serveur.
Vous pouvez définir manuellement la clé secrète en utilisant une variable d’environnement DISCOURSE_SECRET_KEY_BASE dans votre fichier app.yml. Vous pourriez donc essayer quelque chose comme ceci pour préserver les sessions :
-
Sur votre serveur existant, ouvrez la console et trouvez la clé secrète dans Redis
pry(main)> GlobalSetting.safe_secret_key_base => "5fb9dc98be368599e0a..." -
Ajoutez DISCOURSE_SECRET_KEY_BASE à la section
env:de votre app.yml sur l’ancien serveur, en utilisant la valeur trouvée à l’étape (1), puis reconstruisez l’application. En théorie, si tout se passe bien, Discourse utilisera désormais la valeur issue du app.yml et les sessions des utilisateurs seront conservées. Vous pouvez vérifier que la variable d’environnement est bien utilisée en exécutant :GlobalSetting.secret_key_base -
Assurez-vous que le app.yml du nouveau serveur contient la même SECRET_KEY_BASE. Lorsque vous restaurez la sauvegarde, les sessions des utilisateurs devraient être conservées.
Je n’ai pas testé ce flux, donc si vous prévoyez de l’utiliser pour un forum de production, assurez-vous de le tester au préalable !
Note complémentaire : vous ne devriez absolument pas partager la clé secrète entre plusieurs instances de Discourse. La possession de la clé secrète permettrait à quelqu’un de déchiffrer et de modifier son cookie de session sur un site, ce qui pourrait avoir de très graves conséquences en matière de sécurité.