DiscourseConnect を使用しているフォーラムの管理者として、ユーザーがフォーラムへのログインを試みた際にエラーメッセージが表示されるという報告を時折受けることがあるかもしれません。例えば:「アカウントに問題があります。サイトの管理者にお問い合わせください。」
詳細な Discourse Connect ログの有効化
この問題をデバッグするには、まず Discourse のサイト設定で「詳細な Discourse Connect ログ記録」を有効にする必要があります。この設定が以前から有効になっていた場合は、直接 [Admin/Logs/Error Logs] に移動してください。設定が有効になっていなかった場合は、ユーザーに再度ログインを試みていただき、失敗したログインのログエントリを生成できるようにしてください。
ログエントリの読み取り
[Admin/Logs/Error Logs] に移動し、Verbose SSO log: Record was invalid で始まる最近のログエントリを探してください。エントリが見つからない場合は、ログページの下部にある検索ボックスに「Record was invalid」と入力してください。該当するログエントリをクリックし、ログツールバーの「info」タブをクリックします。
必要な情報は、ログエントリに記載された理由(reason)と、info セクションに記載された email および external_id です。
require_activation による DiscourseConnect ログイン問題の解決
SSO ログインでよくある問題の一つは、Record was invalid: User {:primary_email=>\"has already been taken\"} というエラーです。
これは、SSO ペイロード内の require_activation パラメータが true に設定されており、Discourse に既存のアカウントを持つユーザーが、まだ single_sign_on_record に関連付けられていないか、single_sign_on_record は存在するものの、そのレコードの external_id がログインしようとしているユーザーの external_id と一致していない場合に発生します。
これを確認するには、フォーラムの Rails コンソールにアクセスし、失敗した SSO ログインで使われたメールアドレスを持つユーザーを検索してください。
u = User.find_by_email('sally@example.com')
次に、このユーザーに single_sign_on_record があるか確認します。
sso_record = u.single_sign_on_record
ユーザーはフォーラムに存在するが SSO レコードを持っていない場合は、SSO ログから取得した値を使ってレコードを作成できます。
SingleSignOnRecord.create!(user_id: 2, external_id: 2, external_email: 'sally@example.com', last_payload: '')
これでユーザーはログインできるようになるはずです。
ユーザーに既存の SSO レコードがあるものの、その external_id が失敗したログイン試行の external_id と一致しない場合は、なぜこのような事態になったのか調査する必要があります。この問題は、ユーザーのアカウントが SSO プロバイダー側で削除され、その後再作成された場合に発生することがあります。この場合、SSO レコードを更新して新しい external_id を使用できます。
sso_record.external_id = <failed-sso-login-record-external_id>
sso_record.save!
これでユーザーはログインできるようになるはずです。
WP Discourse プラグインを使用しており、上記の問題に直面している場合は、Rails コンソールにアクセスせずに問題を解決する方法の詳細については、Validate Email Addresses with the WP Discourse plugin をご覧ください。


I was trying it with the " < > " and it wasn’t working, of course ツ



Thank you!