Iceman
(Iceman)
1
みなさん、こんにちは。
この件でわざわざお邪魔して申し訳ありません。先日、Discourse のインストールを最新バージョンに更新しました。LDAP プラグイン(https://github.com/jonmbake/discourse-ldap-auth.git)を使用しているのですが、ユーザーがログインできなくなっています。
セッションを維持している場合は問題が発生しませんが、現在ログインしようとすると、「Log In」をクリックした際に URL が /auth/failure?message=csrf_detected に変更され、以下のエラーメッセージが表示されます:「Authorization timed out, or you have switched browsers. Please try again.(認証がタイムアウトしました、またはブラウザが切り替わりました。もう一度お試しください。)」。
この状況を引き起こす可能性のある最近の変更があったかどうか、ご存知の方はいらっしゃいますでしょうか?
よろしくお願いいたします。
@david さんならアドバイスがあるかもしれませんね?
Iceman
(Iceman)
3
余談ですが、以前のバージョンに戻す方法はありますか?いろいろ探したところ、プラグイン(または問題のある特定のプラグイン)を無効化するというのが一般的な解決策のようですが、このプラグインは無効にできません。ユーザーがこのプラグインを使ってプラットフォームにログインするためです 
pfaffman
(Jay Pfaffman)
4
正式にはサポートされていませんが、バックアップがある場合、Postgresのデータディレクトリを削除し、app.ymlのバージョン行にコミットを記述して再ビルドし、その後バックアップを復元することができます。
Iceman
(Iceman)
5
はい、バックアップを取り、動作が不安定なため、以前使っていたバージョンの SHA を使って再構築を試みています。
別件として、最新の安定版を保持しており、何か方法で修正できないか模索中です。
@codinghorror が提案したように、@david にアドバイスがあるかどうかはわかりませんが、ユーザーベースがロックアウトされているため(セッションを維持している場合を除く)、あらゆる方法を試す用意があります。
Iceman
(Iceman)
6
緊急更新:アップグレード前のマシン状態をスナップショットとしてバックアップバージョンを試しました。「ログイン」をクリックすると、メインページが二度再読み込みされます。当時の正確なコミット SHA で再構築を試みましたが、DB Rake エラーが発生し、成功しませんでした。
LDAP に関する他の報告を探しましたが、見当たりませんでした。これは外部ソースが原因で起こる可能性がありますか?
Iceman
(Iceman)
7
最終更新:
問題を解決しました。根本原因は Discourse に関連しないものでした(皆さん、申し訳ありません)。問題は、証明書が更新され、HAP 経由で提供されていたことです。以前は HAP を使用しておらず、Discourse 自身が証明書を提供していました。この詳細を忘れていたため、CORS エラーが発生しました。
教訓:
- Discourse のロールバックは推奨されません。マシン全体のバックアップを事前に用意しておく方が良いでしょう(幸運なことに、私たちはそうしていました)。
- ここに書かれた手順に従って特定の SHA で再構築することがなぜこれほど難しかったのか、まだ確認できていません。私はそれを達成できませんでした。
- 常に HAP から証明書を提供するのが良いですが、そのことを忘れないでください(他の人への参考として:Discourse には独自の NGINX があるため、
'set-header X-Forwarded-Proto https' フラグを追加する必要があります。ここが失敗の原因でした)。
- 誰も同じ問題を報告していなかったこと(プラグインが公式ではないため、これは端ケースと考えることもできます)は、その方向性を示していました(コミュニティが意図した通りですね :P)。
- 問題は再構築が更新によってトリガーされた時点で失敗したため、証明書の更新を覚えていないほど遅れて発現しました。
もう一度、感謝と騒音を起こして申し訳ありません!