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

**URL:** https://meta.discourse.org/t/updating-custom-user-field-through-the-api/254515
**Category:** Development
**Tags:** rest-api
**Created:** [8 Febrero, 2023 19:59 UTC](https://meta.discourse.org/t/updating-custom-user-field-through-the-api/254515 "2023-02-08T19:59:32Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![Richie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/richie/32/115110_2.png) [@Richie](https://meta.discourse.org/u/Richie)
#### Post date: [8 Febrero, 2023 19:59 UTC](https://meta.discourse.org/t/updating-custom-user-field-through-the-api/254515/1 "2023-02-08T19:59:32Z")

</div>

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](https://meta.discourse.org/t/reverse-engineer-the-discourse-api/20576), 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`? 🤔

---

<div class="post-metadata">

### Author: ![Richie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/richie/32/115110_2.png) [@Richie](https://meta.discourse.org/u/Richie)
#### Post date: [8 Febrero, 2023 22:01 UTC](https://meta.discourse.org/t/updating-custom-user-field-through-the-api/254515/2 "2023-02-08T22:01:02Z")

</div>

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 `PUT`ea lo siguiente:

```plaintext
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:

```plaintext
' 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? 🤔

---

<div class="post-metadata">

### Author: ![Richie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/richie/32/115110_2.png) [@Richie](https://meta.discourse.org/u/Richie)
#### Post date: [8 Febrero, 2023 22:20 UTC](https://meta.discourse.org/t/updating-custom-user-field-through-the-api/254515/3 "2023-02-08T22:20:09Z")

</div>

> [@Richie](#):
>
> ¿Me estoy perdiendo algo obvio aquí? 🤔

AARRGGHHH 🤦‍♂️

Sí, sí lo estaba.

Esto:

 ![Screenshot 2023-02-08 at 22.18.26](https://global.discourse-cdn.com/meta/original/4X/4/e/f/4ef3d324f0ca3c28fbeb349efa088cdb572fbb85.png)

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

Por supuesto que sí 🤯

Si rehago mi llamada API y la realizo como `system`, funciona bien 🙄

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [10 Marzo, 2023 22:20 UTC](https://meta.discourse.org/t/updating-custom-user-field-through-the-api/254515/4 "2023-03-10T22:20:39Z")

</div>

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