Supprimer l'avatar de l'utilisateur via l'API

Bonjour !

Nous disposons d’une application de forum Discourse connectée à notre application via SSO. Les avatars des utilisateurs sont mis à jour directement via ce mécanisme. Cependant, nos photos sont modérées, nous devons donc effacer les avatars des utilisateurs côté l’application Discourse.

Est-il possible de le faire via l’API REST ou par des améliorations du mécanisme SSO ? Je ne trouve pas cette information dans la documentation.

Merci !

1 « J'aime »

Vous devriez pouvoir appeler la route sync_sso pour resynchroniser l’avatar de l’utilisateur, mais vous pouvez également envoyer une requête PUT vers http://localhost:3000/u/<username>/preferences/avatar/pick avec un upload_id vide

pour supprimer l’avatar actuel de l’utilisateur et lui attribuer un avatar avec une lettre.

4 « J'aime »

@blake Erreur lors de l’envoi de cette requête. J’ai utilisé une requête POST.
{
“failed”: “ÉCHEC”
}

Avez-vous essayé la méthode PUT comme recommandé ?

1 « J'aime »

@pfaffman désolé, j’ai utilisé put

2 « J'aime »

Vous devrez utiliser le point de terminaison sync_sso si l’option sso overrides avatar est activée.

2 « J'aime »

Nous utilisons un point de terminaison SSO, mais il ne met à jour l’avatar de l’utilisateur qu’au moment de la connexion. Dans notre cas, nous devons le mettre à jour manuellement.

1 « J'aime »

Oui, c’est tout à fait acceptable. Vous pouvez effectuer une requête POST vers le point de terminaison sync_sso manuellement à tout moment.

1 « J'aime »

Pourriez-vous s’il vous plaît joindre le lien vers la documentation de l’API pour ce point de terminaison ?

1 « J'aime »

Voici un exemple de code Ruby utilisant le gem discourse_api que vous pouvez consulter comme référence. Le point de terminaison sync_sso diffère légèrement des autres, car vous devez lui envoyer un charge utile signée.

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 « J'aime »

Ai-je bien compris que nous pouvons envoyer POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... ?
Les paramètres ‘sso’ et ‘sig’ sont-ils similaires à ceux du flux d’autorisation SSO ?

J’ai essayé d’effectuer la requête comme expliqué ci-dessus POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... et elle a répondu 200 avec mon utilisateur, mais l’avatar de l’utilisateur n’a pas été mis à jour sans aucun événement de journalisation. Qu’est-ce que je fais mal ?

Vous devez inclure api_key et api_username dans l’en-tête HTTP, car leur utilisation dans les paramètres de requête est dépréciée.

Je pense qu’il doit y avoir une protection dans le code qui empêche la suppression accidentelle d’un avatar si le champ est omis ou vide. Vous devrez probablement fournir une URL vers un avatar par défaut pour remplacer l’avatar existant.

J’ai remplacé les identifiants API par des en-têtes.
La synchronisation SSO n’a pas mis à jour l’avatar de l’utilisateur avec celui fourni. Bien que le travail Sidekiq dans cet appel ait été terminé et qu’aucun journal d’erreur ou d’avertissement n’ait été enregistré.

Vous pouvez activer les journaux détaillés de SSO dans les paramètres du site pour voir si quelque chose y apparaît.

L’avatar_url que vous fournissez est-il public ? Votre site Discourse devra pouvoir y accéder.

1 « J'aime »