Mise à jour du champ utilisateur personnalisé via l'API

J’ai essayé d’effectuer une ingénierie inverse sur la mise à jour d’une valeur de user_field.

J’ai suivi les étapes décrites dans Reverse engineer the Discourse API, j’ai modifié un utilisateur de test et j’ai noté ce qui se passait dans l’onglet réseau du navigateur.

Je vois que je dois faire un PUT vers cette URL : https://example.com/u/my-username-here.json

Là où j’ai été un peu confus, c’est que je n’ai pas vu de charge utile JSON, mais plutôt des données de formulaire. La charge utile était : user_fields%5B1%5D=some+dji%2C+some+Autel\u0026user_fields%5B5%5D=%40UKDroneClub\u0026user_fields%5B6%5D=%40iKiteFlyer\u0026user_fields%5B8%5D=test\u0026timezone=Europe%2FLondon\u0026default_calendar=none_selected

Je souhaite seulement mettre à jour une valeur de user_field.

C’est encodé en URL : user_fields%5B8%5D=test

Et décodé, cela donne : user_fields[8]=test

(8 = l’identifiant du user_field que je veux mettre à jour)

Comment puis-je convertir cette valeur de données de formulaire en une charge utile JSON afin de pouvoir ensuite y faire un PUT ? :thinking:

2 « J'aime »

Je ne suis pas sûr de ce que je fais de mal, mais je peux mettre à jour la section “À propos de moi” du profil d’un utilisateur via un appel API, mais je ne peux pas mettre à jour les user_fields.

Si je surveille mon navigateur lors de la modification d’un utilisateur, je peux voir qu’il effectue un PUT de ce qui suit :

bio_raw=aboutmetest&user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=qwerty&timezone=Europe%2FLondon&default_calendar=none_selected

J’utilise le code suivant pour effectuer mon appel API PUT :

' Ajouter des en-têtes
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' Ajouter des paramètres de corps de formulaire
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

Chaque fois que je fais l’appel API, bien sûr, la valeur bio_raw est mise à jour avec l’horodatage actuel (à titre de test).

Mais pour une raison quelconque, la valeur user_fields[8] n’est pas mise à jour du tout. Aucune erreur, elle ne se met simplement pas à jour.

J’ai essayé de l’encoder en URL comme user_fields%5B8%5D et j’ai aussi essayé en texte brut user_fields[8], mais aucun n’a d’effet.

Est-ce que je rate quelque chose d’évident ? :thinking:

AARRGGHHH :man_facepalming:

Oui, oui je ratais quelque chose.

Ceci :

Empêche la modification du champ utilisateur lorsque l’appel API est effectué par l’utilisateur.

Bien sûr que oui :exploding_head:

Si je retravaille mon appel API et que je l’effectue par system, cela fonctionne bien :roll_eyes:

6 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.