APIによるユーザーアバターの削除

こんにちは!

当社のアプリと SSO 経由で連携している Discourse フォーラムアプリがあります。ユーザーのアバターもその経由で更新されます。しかし、当社の写真にはモデレーションが必要であるため、Discourse アプリ側でユーザーのアバターをクリアする必要があります。

これを REST API または SSO メカニズムの拡張によって行うことは可能でしょうか?ドキュメントにはそのような情報が記載されていませんでした。

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

「いいね!」 1

sync_sso ルートを呼び出してユーザーのアバターを再同期できるはずです。ただし、http://localhost:3000/u/<username>/preferences/avatar/pick に対して空の upload_id を含む PUT リクエストを送信することもできます。

これにより、ユーザーの現在のアバターを削除し、文字アバターを割り当てることができます。

「いいね!」 4

@blake このリクエストの送信でエラーが発生しました。POSTリクエストを使用しました。
{
“failed”: “FAILED”
}

推奨されている通り、PUT を試しましたか?

「いいね!」 1

@pfaffman すみません、put を使ってしまいました

「いいね!」 2

「SSO オーバーライド アバター」が有効になっている場合は、sync_sso エンドポイントを使用する必要があります。

「いいね!」 2

SSOエンドポイントを使用していますが、ユーザーアバターの更新はログイン時のみ行われます。当社のケースでは、手動で更新する必要があります。

「いいね!」 1

はい、問題ありません。sync_sso エンドポイントに対しては、いつでも手動で POST リクエストを送信できます。

「いいね!」 1

そのエンドポイントの API ドキュメントへのリンクを添付していただけますか?

「いいね!」 1

以下は、discourse_api gem を使用した Ruby コードのサンプルです。参考にご利用ください。sync_sso エンドポイントは他のエンドポイントとは少し異なり、署名付きペイロード を送信する必要があります。

client = DiscourseApi::Client.new('host')
client.api_key = 'api_key'
client.api_username = 'api_username'
puts client.sync_sso(
  sso_secret: 'abcdefghij',
  username: '24db27218ed09205a5a0',
  name: '24db27218ed09205a5a0',
  email: '24db27218ed09205a5a076983bf241ab@example.com',
  external_id: '684',
  avatar_url: 'https://d3bpeqsaub0i6y.cloudfront.net/user_avatar/meta.discourse.org/codinghorror/240/110067_2.png',
)
「いいね!」 2

お聞きしたいのですが、POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... を送信することは可能でしょうか?
また、‘sso’ および ‘sig’ パラメータは、SSO 認証フローにおけるそれらと同様のものですか?

上記の説明通り POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... のリクエストを試みましたが、200 でユーザー情報が返却されたものの、ユーザーのアバターが更新されず、ログイベントも記録されませんでした。何が間違っているのでしょうか?

api_keyapi_username は HTTP ヘッダーに含める必要があります。クエリパラメータで使用することは 非推奨 です。

フィールドが省略されている、または空の場合に、アバターが誤って削除されないようにする保護機能がコードに組み込まれていると思われます。既存のアバターを置き換えるには、デフォルトのアバターの URL を指定する必要があるでしょう。

API 認証情報をヘッダーに置き換えました。
SSO 同期は、提供されたユーザーアバターで更新されませんでした。ただし、その呼び出しにおける Sidekiq ジョブは正常に完了しており、エラーや警告ログは記録されていません。

サイト設定で詳細な SSO ログを有効にすると、そこに何か表示されるか確認できます。

提供している avatar_url は公開されていますか?Discourse サイトがそれにアクセスできる必要があります。

「いいね!」 1