認証サイトがユーザーのメール変更を許可する場合のDiscourse SSOの扱い方

Discourse の SSO フローを使用しており、このガイドに基づいて実装しています:Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

これまで問題なく動作していましたが、システム内のユーザーがメールアドレスを変更できるようにしたところ、問題が発生するようになりました。

私のシステムでユーザーのメールアドレスを変更すると、Discourse への SSO が機能しなくなります。

ログインエラー

アカウントに問題があります。サイトの管理者にお問い合わせください。

Discourse がメールアドレスとユーザー名が一致しないペイロードを受け取り、どう処理すればよいか分からなくなっているのではないかと推測しています。

これをうまく処理する方法は何でしょうか?

私が考えた最善の案は、SSO を開始する前に Discourse API を使用して、Discourse 側のユーザーのメールアドレスをシステム内のものと一致させることです。

しかし、これが可能かどうかは分かりません。以下は私の失敗した試みです。

リクエスト内容:

https://forum-stage.{domain}.com/users/{username}/preferences/email

Headers:
Content-Type: application/x-www-form-urlencoded
Accept: application/json

Body (Postman で x-www-form-urlencoded 形式):
email: testemail@testdomain.com
api_key: 75a...77d
api_username: system

そして、受け取ったレスポンスは以下の通りです。

{
    "errors": [
        "You are not permitted to view the requested resource."
    ],
    "error_type": "invalid_access"
}

私も同じ現象に遭遇しています。この問題を回避する方法が見つかりましたか?

本来、そのような事態は起こるべきではありません。当社は主に SSO ID をキーとして扱っています。

必要に応じて、Discourse 側でメールを同期するために「sync sso」エンドポイントを使用することもできますが、システム内でメールを変更しても常に動作するはずです。

ただし、以下の例外があります。

Discourse が SSO ID を 5、メールを bob@jane.com と認識している場合

SSO ID が 6、メールが bob@jane.com でログインした場合

これは解決できないため、手動での介入が必要です(まず SSO ID 6 を同期してください)。