У нас есть приложение форума Discourse, подключенное к нашему приложению через SSO. Аватары пользователей обновляются непосредственно через него. Однако наши фотографии проходят модерацию, поэтому нам необходимо очищать аватары пользователей на стороне приложения Discourse.
Можно ли это сделать каким-либо образом через REST API или с помощью улучшений механизма SSO? Я не могу найти эту информацию в документации.
Вы должны иметь возможность вызвать маршрут sync_sso, чтобы повторно синхронизировать аватар пользователя. Однако вы также можете отправить PUT-запрос на http://localhost:3000/u/<username>/preferences/avatar/pick с пустым upload_id
Вот пример кода на Ruby с использованием гема discourse_api, который вы можете использовать в качестве справочного материала. Эндпоинт sync_sso немного отличается от других, так как вам нужно отправлять ему подписанную полезную нагрузку.
Правильно ли я понимаю, что мы можем отправлять запрос 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 в этом вызове была выполнена, и в логах не было ошибок или предупреждений.