ユーザーアカウントの統合

:bookmark: このガイドでは、複数のユーザーアカウントを単一の Discourse アカウントにマージする方法について説明します。Discore UI を通じた一般ユーザーのマージと、コンソールを介したスタッフユーザーのマージについて扱います。

:person_raising_hand: 必要なユーザーレベル:管理者

Discourse でのユーザーアカウントのマージにより、複数のアカウントを 1 つに統合できます。このプロセスは、以下のようなシナリオで役立ちます。

  1. ユーザーが以前の登録を忘れたなど、複数のアカウントを作成した場合。
  2. ユーザーが既存のアカウントを更新する代わりに、新しいメールアドレスで新しいアカウントを作成した場合。
  3. ユーザーが異なる目的(例:個人用、業務用、テスト用)で使用していた複数のアカウントを 1 つのアカウントに統合したい場合。

一般ユーザーのマージ

管理者は、Discourse UI を通じて直接一般ユーザーをマージできます。

:warning: この操作は取り消せません。マージ後、ソースユーザーアカウントは削除されます。

2 つの一般ユーザーをマージするには、以下の手順に従ってください。

  1. ソースユーザー(マージ元のアカウント)のユーザー管理ページに移動します。
  2. ページの一番下までスクロールします。
  3. 「マージ」ボタンをクリックします。
  4. 最初のポップアップウィンドウで、ターゲットアカウント(マージ先のアカウント)のユーザー名を入力し、「転送して削除」をクリックします。
  5. 確認ダイアログが表示されます。表示された確認テキスト(例:transfer @source to @target)を入力し、「転送して削除」をクリックしてマージを開始します。

:information_source: 大規模なアカウントのマージはリソースを多く消費し、ソースユーザーに関連するデータ量によっては処理に時間がかかる場合があります。

マージされるデータ

ユーザーアカウントをマージすると、Discourse は 50 以上のテーブルからデータを統合します。これには以下が含まれます。

  • 投稿とトピック
  • 送信および受信した「いいね」
  • 私密メッセージ
  • ユーザープロフィール情報
  • ユーザー設定と環境設定
  • ユーザーのアクションとアクティビティ(例:ブックマーク、トピック閲覧)
  • バッジと実績
  • 信頼レベルとグループメンバーシップ
  • 関連アカウント(例:ソーシャルログイン)

競合が発生した場合、ターゲットユーザーの詳細が保持されます。両方のユーザーに 匿名ユーザー が関連付けられている場合、ソースユーザーが所有する匿名ユーザーは失われます。

:warning: ソースユーザーを参照するリンク(例:https://discourse.example.com/t/some-topic/17/3?u=source_username)は、マージ後にターゲットユーザーに関連付けられません。

ユーザーのマージと DiscourseConnect に関する重要な注意点

ユーザーアカウントのマージは、実装次第で DiscourseConnect(旧 SSO)に影響を与える可能性があります。

  • DiscourseConnect がメールアドレスベースの場合、DiscourseConnect システムでターゲットアカウントのメールアドレスが使用されていれば問題ありません。ただし、マージ後、ソースユーザーのメールアドレスはターゲットアカウントのセカンダリメールアドレスとして登録されるため、そのメールアドレスを後で DiscourseConnect で使用するとログインエラーが発生する可能性があります。必要に応じて、マージ後にセカンダリメールアドレスを削除することを検討してください。
  • DiscourseConnect システムが Discourse のユーザー ID とは異なる一意のユーザー ID を使用している場合、ソースアカウントの一意の ID がターゲットアカウントに正しくマッピングされていないと、マージにより問題が発生する可能性があります。

スタッフユーザーのマージ

セキュリティ上の理由から、スタッフユーザーのマージはコンソールを通じて行う必要があります。

:information_source: サイトが Discourse によってホストされている場合は、スタッフユーザーのマージについて team@discourse.org までお問い合わせください。

コンソールを介してスタッフユーザーをマージするには、以下の手順に従ってください。

root@host:/var/discourse# ./launcher enter app
root@host-app:/var/www/discourse# rake users:merge['source_username','target_username']

Users merged!

root@host-app:/var/www/discourse#

:warning: コマンド内のコンマの前後にスペースがないことを確認してください。

よくある質問

Q: マージ処理が停止したように見える場合はどうすればよいですか?
A: マージの進行状況画面が長時間変化しない場合は、ページをリフレッシュしてみてください。マージは完了しているが UI が更新されていない可能性があります。

Q: ユーザーのマージを取り消すことはできますか?
A: いいえ、2 つのユーザーをマージすると、その操作は取り消せません。ソースユーザーアカウントはマージ後に恒久的に削除されます。

Q: ユーザーのマージは投稿やトピックに影響しますか?
A: ソースユーザーのすべての投稿とトピックはターゲットユーザーに転送されます。これらのアイテムの作成者は、ターゲットユーザーに変更されます。

「いいね!」 10

投稿が新しいトピックに分割されました:サイトからユーザー結合ボタンが消えた

マージとSSOに関して、他にも厄介な状況が見つかりました。

  1. ユーザーが first.last@organizationA.com というメールアドレスでOrganization AでSSOアカウントを作成します
  2. ユーザーがOrganization Bに移動し、first.last@organizationB.com というメールアドレスでSSOアカウントを作成します
  3. 2つのアカウントをマージします
    1. ユーザーのプライマリメールアドレスは first.last@organizationB.com になります
    2. しかし、マージプロセスにより first.last@organizationA.com がセカンダリメールアドレスとして残ります
  4. ユーザーがOrganization Aに戻り、first.last@organizationA.com でSSO経由でサインインしようとすると、このDiscourseメッセージとともに次のログインループにはまり込みます: Slow down, you’re making too many requests (速度を落としてください、リクエストが多すぎます)

修正するには、手順 #3 でマージされたアカウントのセカンダリメールアドレスから first.last@organizationA.com を削除しました。これにより、別の新しいアカウントが作成され、それを first.last@organizationB.com アカウントとマージしました。

また、マージ後にすぐにアカウントのセカンダリメールアドレスを削除するように、マージプロセスを調整しました。