Actualización de campo de usuario personalizado a través de la API

He estado intentando hacer ingeniería inversa de la actualización de un valor de user_field.

Lo hice siguiendo los pasos en Reverse engineer the Discourse API, edité un usuario de prueba y tomé nota de lo que ocurría en la pestaña de red del navegador.

Puedo ver que necesito hacer PUT a esta URL: https://example.com/u/my-username-here.json

Donde me confundí un poco fue al no ver una carga útil JSON, sino que es algún formdata. La carga útil era: user_fields%5B1%5D=some+dji%2C+some+Autel%26user_fields%5B5%5D=%40UKDroneClub%26user_fields%5B6%5D=%40iKiteFlyer%26user_fields%5B8%5D=test%26timezone=Europe%2FLondon%26default_calendar=none_selected

Solo deseo actualizar un valor de user_field,
Está codificado en URL: user_fields%5B8%5D=test
Y decodificado, se lee como: user_fields[8]=test

(8 = el id del user_field que quiero actualizar)

¿Cómo convertiría este valor de datos de formulario en una carga útil JSON para luego poder hacer PUT? :thinking:

2 Me gusta

No estoy seguro de qué estoy haciendo mal aquí, pero puedo actualizar la sección “Acerca de mí” del perfil de un usuario a través de una llamada a la API, pero no puedo actualizar ninguno de los user_fields.

Si monitorizo mi navegador al editar un usuario, puedo ver que PUTea lo siguiente:

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

Estoy usando el siguiente código para hacer mi llamada PUT a la API:

' Agregar algunas cabeceras
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' Agregar algunos parámetros de cuerpo de formulario
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

Cada vez que hago la llamada a la API, efectivamente, el valor bio_raw se actualiza a la marca de tiempo actual (como prueba).

Pero, por alguna razón, el valor user_fields[8] no se actualiza en absoluto. No hay errores, simplemente no se actualiza.

He intentado codificarlo en URL como user_fields%5B8%5D y también lo he intentado como texto plano user_fields[8], pero ninguno tiene ningún efecto.

¿Me estoy perdiendo algo obvio? :thinking:

AARRGGHHH :man_facepalming:

Sí, sí lo estaba.

Esto:

Evita la edición del campo de usuario cuando la llamada API la realiza el usuario.

Por supuesto que sí :exploding_head:

Si rehago mi llamada API y la realizo como system, funciona bien :roll_eyes:

6 Me gusta

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