キャンセルされたメンバーシップの対応

WordPress の SSO を使用して、メンバーシップを購入したユーザーの認証を行っています(メンバーシップの有無を判断するためのカスタムロジックを WordPress 側に実装しました)。現在、すべて正常に動作していますが、メンバーシップがキャンセルされた場合の対応方法について疑問があります。

もちろん、メンバーシップのキャンセルにより、そのユーザーはログインできなくなるはずです。しかし、キャンセル後もフォーラムへのアクセスを続け、セッションを維持してしまう可能性があるため、手動でログアウトさせる必要があります(手動作業は、Facebook グループから移行した際に解消したと思っていたのですが)。

さらに、以下の 2 つの課題も頭をよぎっています。

  • ユーザーが投稿したトピックや投稿はどうなるのでしょうか?これらは残しておきたいと考えています。そのため、ユーザーアカウントを削除することはできないはずです。
  • キャンセルされたメンバーに対してダイジェストメールが送信されないようにしたいと考えています。Discourse は、私が「何か」を行うまで、アカウントがキャンセルされたことを認識しません。それは何でしょうか?ただし、ユーザーのコンテンツは削除したくありません。

これらはすべてユーザーのサプレッション(抑制)で解決できるのでしょうか?また、これを自動化するためのベストプラクティスは何でしょうか?何らかのカスタムコードが必要だとは思っていますが、回避できる可能性を確認したく、質問いたしました。

よろしくお願いいたします。

それらを匿名化できます。これにより、情報は残ったままですが、ユーザー名は表示されなくなります。

もう一つの選択肢として、ユーザーを作成する代わりに、カスタムロジックを実装して新しいグループに追加する方法があります。こうすれば、ダイジェストはカテゴリにアクセスできるユーザーのみが閲覧できるようになります。

また、キャンセルされたすべてのユーザーに対してログアウト(またはアカウント削除)を強制する、何らかの cron ジョブを実行することも可能です。

@marianord さん、ありがとうございます。2 段落目の内容が完全に理解できませんでした。「ユーザーを作成する代わりに」とおっしゃる場合、ユーザーのライフサイクルのどの段階を指しているのでしょうか?単純な点を見過ごしている可能性もありますが、ご提案の内容が明確ではありません。ご clarification いただけますでしょうか。

また、匿名化機能についても確認させていただきますが、いくつか質問があります。

  • ユーザー名は投稿の横にどのように表示されるのでしょうか?
  • 同じメールアドレスなどでメンバーシップに再登録できた場合、その「匿名化」は解除され、過去の投稿に再びユーザー名が表示されるのでしょうか?

改めてありがとうございます。

ところで、私がこの件で最も懸念しているのはダイジェストメールです。これは顧客向け(メール送信)の機能だからです。別の選択肢として、ダイジェスト設定を「送信しない」に手動で変更すればいいのでしょうか(ただし、これも手動作業であり、将来的には何らかの API を通じて可能になることを願っています)。

それが可能であれば、ユーザーに対して技術的には何も行う必要はありません。ユーザーは Discourse 上で有効なアカウントのまま残せますが、メールは送信されなくなります(上記参照)。ただし、ログインはできなくなります。

これでうまくいくかもしれません。ご意見をお聞かせください。

Discourse API を通じてユーザーを停止(suspend)させるのが、この処理を自動化する良い方法かもしれません。ユーザーが停止されると、Discourse からログアウトされ、ダイジェストメールも送信されなくなります。停止時に message を指定すると、そのメッセージがユーザーにメールとして送信されます。これを使って、メンバーシップの更新を促すことができます。

注意点として、停止機能は問題のあるユーザーに対応するために設計されたものであり、将来更新される可能性のある期限切れのメンバーシップを扱うために設計されたものではありません。停止されたユーザーに送信されるメールのテンプレートをカスタマイズするために、サイト内の user_notifications.account_suspended.text_body_template テキストをカスタマイズする必要があるかもしれません。

匿名化されたユーザーが作成した投稿は、以下のように表示されます。

匿名化されたユーザーを元に戻す簡単な方法はありません。私が知っている唯一のアプローチは、Rails コンソールから匿名ユーザーを新しいユーザーとマージすることです。匿名化するとユーザーのすべての識別データが削除されるため、どのアカウントをマージすべきか特定するのが難しい場合があります。ユーザーがメンバーシップを更新する可能性がある場合は、ユーザーを停止させる方がよいアプローチでしょう。

@simon さん、ありがとうございます。とても参考になりました。

おっしゃる通り、この場合の停止が適切なアプローチのようです。ただ、送信されるメールについて一点質問があります。私は、ユーザーがキャンセルした際に送信される CRM ベースのメールを設定しており、Discourse から何も送信されたくないと考えています。

「ユーザーを停止する際に message を指定した場合、そのメッセージがユーザーへのメールとして送信されます」と記載されています。

もし message を指定しない場合、何も送信されず、テンプレートの更新も不要(なぜなら送信されないため)ということでよろしいでしょうか?

停止機能について確認しているだけですが、「停止理由」とメールフィールドの使い方が少し不明確です。

基本的な目標は、ユーザーを停止するだけで、それ以外の何もしないことです :slight_smile:

再度、ありがとうございます。

その通りです。テストする最も簡単な方法は、使い捨てのメールアドレスを持つユーザーを作成し、UI を通じてそのユーザーの停止と停止解除を試してみることです。

ユーザーが停止されると、suspended_untilreason を設定する必要があります。これらのフィールドは、停止されたユーザーがサイトにログインしようとした際に表示されます。このテキストは、管理画面のカスタマイズ/テキストページで login.suspended_with_reason を検索することでカスタマイズできます。

hide suspension reasons サイト設定を有効にしない限り、停止されたユーザーのユーザーカードやプロフィールページには、ユーザーが停止されたことを示す通知が表示されます。hide suspension reasons サイト設定を有効にすると、その通知はスタッフのみが表示できるようになります。