sync_sso를 사용하면서 아바타를 초기화(문자 아바타 프록시로 복귀)하려고 합니다.
현재 avatar_force_update=true를 전달하고 avatar_url 값은 전달하지 않고 있습니다. 대신 avatar_url에 명시적인 (null?) 값을 전달해야 하는 걸까요? 미리 감사드립니다.
Discourse SSO 코드를 살펴본 결과, sync_sso를 호출하여 사용자의 아바타를 글자 아바타로 초기화하는 것은 불가능할 것으로 보입니다. 해당 코드는 avatar_url 파라미터로 전달된 URL에서 아바타를 다운로드하려고 합니다. 해당 파라미터가 생략되거나 null 또는 빈 문자열로 설정된 경우, 사용자의 아바타에는 아무 변경 사항도 적용되지 않습니다.
API에 해당 동작을 요청하는 방법을 어떻게 설정해야 할까요? 우회 방법을 구현해 보았지만, 아직 제대로 작동하지 않습니다.
특정 작업을 수행하기 위해 어떤 API 호출을 해야 하는지 파악하는 좋은 방법은, 웹 인스펙터의 네트워크 탭을 보면서 Discourse 사용자 인터페이스를 통해 해당 작업을 실행하고 요청에 대한 세부 정보를 확인하는 것입니다. 이 방법에 대한 자세한 내용은 Discourse API 역공학하기를 참고하세요.
사용자 아바타는 시스템 아바타로 업데이트할 수 있으며, 이를 위해 다음 URL로 API PUT 요청을 보내야 합니다.
http://forum.example.com/u/<discourse_username>/preferences/avatar/pick
요청의 폼 데이터에 type=system을 설정하세요. URL에는 해당 포럼의 URL과 업데이트하려는 Discourse 사용자 이름을 대체해야 합니다.
다음은 제 로컬 사이트에서 가져온 curl 요청 예시입니다. $api_key는 All Users API Key로 설정해 두었습니다:
curl -X PUT "http://localhost:3000/u/scossar/preferences/avatar/pick" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-H "Content-Type: multipart/form-data;" \
-F "type=system"
참고할 점은 sso overrides avatar 사이트 설정을 활성화해 두었다면 이 요청이 실패한다는 것입니다.
이상하게도 제가 시도했던 우회 방법이 바로 그것인데, 결과가 일관되지 않았습니다. 조금 더 시도해 보고 다시 보고하겠습니다.