external_idフィールドについてのご質問かと思います。DiscourseConnectのペイロードにexternal_idフィールドを設定する必要があります。このフィールドの値は、変更されないユーザーに関連付けられた文字列であるべきです。アプリケーションにユーザーテーブルがあると仮定します。そのテーブルのユーザーエントリの主キーをexternal_idフィールドの値として使用するのが良いでしょう。
ユーザーがDiscourseConnect認証をウェブサイトから追加する前にDiscourseでアカウントを作成していた場合、DiscourseConnect経由でDiscourseに初めてログインする際に、DiscourseはDiscourseConnectペイロードに含まれるメールアドレスに基づいてユーザーを見つけようとします。ユーザーが見つかった後、DiscourseConnectペイロードからのexternal_idを含むレコードがDiscourseデータベースに追加されます。次にユーザーがログインする際には、メールアドレスではなくexternal_idによってユーザーが見つけられます。(これは、DiscourseConnectペイロードでrequire_activationパラメータをtrueに設定した場合、機能しないことに注意してください。)
Discourseには、ほとんどのエッジケースに対応するための優れたフォールバック機能があります。複数のアカウントやメールアドレスを持つユーザーに関連する問題があり、エラーが発生する可能性があります。これらのケースの対処方法に関する詳細は、こちらにあります:デバッグと一般的なDiscourseConnectの問題の修正。