こんにちは!
当社のアプリと SSO 経由で連携している Discourse フォーラムアプリがあります。ユーザーのアバターもその経由で更新されます。しかし、当社の写真にはモデレーションが必要であるため、Discourse アプリ側でユーザーのアバターをクリアする必要があります。
これを REST API または SSO メカニズムの拡張によって行うことは可能でしょうか?ドキュメントにはそのような情報が記載されていませんでした。
よろしくお願いいたします!
こんにちは!
当社のアプリと SSO 経由で連携している Discourse フォーラムアプリがあります。ユーザーのアバターもその経由で更新されます。しかし、当社の写真にはモデレーションが必要であるため、Discourse アプリ側でユーザーのアバターをクリアする必要があります。
これを REST API または SSO メカニズムの拡張によって行うことは可能でしょうか?ドキュメントにはそのような情報が記載されていませんでした。
よろしくお願いいたします!
sync_sso ルートを呼び出してユーザーのアバターを再同期できるはずです。ただし、http://localhost:3000/u/<username>/preferences/avatar/pick に対して空の upload_id を含む PUT リクエストを送信することもできます。
これにより、ユーザーの現在のアバターを削除し、文字アバターを割り当てることができます。
@blake このリクエストの送信でエラーが発生しました。POSTリクエストを使用しました。
{
“failed”: “FAILED”
}
推奨されている通り、PUT を試しましたか?
@pfaffman すみません、put を使ってしまいました
「SSO オーバーライド アバター」が有効になっている場合は、sync_sso エンドポイントを使用する必要があります。
SSOエンドポイントを使用していますが、ユーザーアバターの更新はログイン時のみ行われます。当社のケースでは、手動で更新する必要があります。
はい、問題ありません。sync_sso エンドポイントに対しては、いつでも手動で POST リクエストを送信できます。
そのエンドポイントの API ドキュメントへのリンクを添付していただけますか?
以下は、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',
)
お聞きしたいのですが、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_key と api_username は HTTP ヘッダーに含める必要があります。クエリパラメータで使用することは 非推奨 です。
フィールドが省略されている、または空の場合に、アバターが誤って削除されないようにする保護機能がコードに組み込まれていると思われます。既存のアバターを置き換えるには、デフォルトのアバターの URL を指定する必要があるでしょう。
API 認証情報をヘッダーに置き換えました。
SSO 同期は、提供されたユーザーアバターで更新されませんでした。ただし、その呼び出しにおける Sidekiq ジョブは正常に完了しており、エラーや警告ログは記録されていません。
サイト設定で詳細な SSO ログを有効にすると、そこに何か表示されるか確認できます。
提供している avatar_url は公開されていますか?Discourse サイトがそれにアクセスできる必要があります。