API로 사용자 아바타 삭제

안녕하세요!

저희는 SSO를 통해 저희 앱과 연결된 Discourse 포럼 앱을 사용하고 있습니다. 사용자 아바타는 이를 통해 바로 업데이트됩니다. 하지만 저희 사진은 검수(모더레이션)를 거치므로, Discourse 앱 측에서 사용자 아바타를 삭제할 필요가 있습니다.

이것을 REST API나 SSO 메커니즘을 개선하여 어떻게 할 수 있을까요? 문서에서 해당 정보를 찾을 수 없었습니다.

감사합니다!

sync_sso route를 호출하여 사용자 아바타를 다시 동기화할 수 있어야 합니다. 하지만 빈 upload_id를 포함하여 http://localhost:3000/u/<username>/preferences/avatar/pick로 PUT 요청을 보내는 것도 가능합니다.

이렇게 하면 사용자의 현재 아바타를 삭제하고 문자 아바타를 할당할 수 있습니다.

@blake 이 요청을 보내는 중 오류가 발생했습니다. POST 요청을 사용했습니다.
{
“failed”: “FAILED”
}

권장대로 PUT을 시도해 보셨나요?

@pfaffman 죄송합니다. put를 사용했습니다.

sso overrides avatar가 활성화된 경우 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를 사용하는 방식은 비추천(deprecated) 상태이므로, 이들을 HTTP 헤더에 포함시켜야 합니다.

필드가 누락되거나 비어 있는 경우 아바타가 실수로 삭제되는 것을 방지하기 위해 코드 내에某种 보호 장치가 있을 것으로 생각됩니다. 기존 아바타를 대체할 기본 아바타의 URL을 제공해야 할 가능성이 높습니다.

API 자격 증명을 헤더로 교체했습니다.
SSO 동기화 시 제공된 아바타로 사용자 아바타가 업데이트되지 않았습니다. 해당 호출에서 Sidekiq 작업은 완료되었고, 오류나 경고 로그도 없었습니다.

사이트 설정에서 상세 SSO 로그를 활성화하여 해당 로그에 내용이 표시되는지 확인해 보세요.

제공하고 있는 avatar_url이 공개된 URL인가요? Discourse 사이트가 해당 URL에 접근할 수 있어야 합니다.