Eliminar avatar de usuario mediante API

¡Hola!

Tenemos una aplicación de foro Discourse conectada a nuestra aplicación mediante SSO. Las avatares de los usuarios se actualizan directamente a través de ella. Sin embargo, nuestras fotos están moderadas, por lo que necesitamos borrar los avatares de los usuarios en el lado de la aplicación de Discourse.

¿Se puede hacer de alguna manera mediante la API REST o mediante mejoras en el mecanismo de SSO? No he encontrado esta información en la documentación.

¡Gracias!

1 me gusta

Deberías poder llamar a la ruta sync_sso para volver a sincronizar el avatar del usuario, pero también puedes hacer una solicitud PUT a http://localhost:3000/u/<username>/preferences/avatar/pick con un upload_id vacío

para eliminar el avatar actual del usuario y asignarle un avatar de letra.

4 Me gusta

@blake Error al enviar esta solicitud. He utilizado una solicitud POST.
{
“failed”: “FAILED”
}

¿Probaste con PUT como se recomendó?

1 me gusta

@pfaffman lo siento, usé put

2 Me gusta

Deberás usar el endpoint sync_sso si tienes sso overrides avatar activado.

2 Me gusta

Usamos el punto final de SSO, pero solo actualiza el avatar del usuario al iniciar sesión. En nuestro caso, necesitamos actualizarlo manualmente.

1 me gusta

Sí, totalmente bien. Puedes hacer una solicitud POST al endpoint sync_sso manualmente en cualquier momento.

1 me gusta

¿Podrías adjuntar el enlace a la documentación de la API para ese endpoint?

1 me gusta

Aquí tienes un código en Ruby que puedes usar y que utiliza el gem discourse_api para que te sirva de referencia. El endpoint sync_sso es un poco diferente de otros endpoints porque necesitas enviarle una carga firmada.

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 Me gusta

¿Entiendo bien que podemos enviar POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=...?
¿Los parámetros ‘sso’ y ‘sig’ son similares a los del flujo de autorización SSO?

Intenté realizar la solicitud como se explicó anteriormente POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... y respondió con 200 y mi usuario, pero la imagen de perfil del usuario no se actualizó y no se registraron eventos en el log. ¿Qué estoy haciendo mal?

Debes incluir api_key y api_username en el encabezado HTTP, ya que usarlos en los parámetros de la consulta está obsoleto.

Creo que debe haber alguna protección en el código que evite eliminar accidentalmente un avatar si el campo se omite o está vacío. Es muy probable que necesites proporcionar una URL a un avatar predeterminado para reemplazar el avatar existente.

Reemplacé las credenciales de la API por encabezados. La sincronización de SSO no actualizó el avatar del usuario con el proporcionado. Aunque el trabajo de Sidekiq en esa llamada se completó y no hubo registros de errores ni advertencias.

Puedes activar los registros detallados de SSO en la configuración del sitio para ver si aparece algo allí.

¿La avatar_url que estás proporcionando es pública? Tu sitio de Discourse necesitará poder acceder a ella.

1 me gusta