Cómo cambiar campos de usuario con API

(Edición: ver el 2º post para la solución: cómo cambiar campos de usuario con la API)

@sam, mencionaste (en un post de un tema ahora cerrado) con respecto a alguien que quería usar la API para actualizar un campo personalizado en un registro de usuario: “el campo necesita estar en la lista blanca; ¿puedes agregarlo a /admin/customize/user_fields o este campo está destinado a estar completamente oculto para los usuarios?”.

Dos preguntas rápidas:

  1. ¿Qué es el endpoint /admin/customize/?
  2. ¿Cómo se “pone en la lista blanca” un campo? (¿Qué significa eso? ¿Ponerlo en la lista blanca para que la API pueda acceder a él, de alguna manera?!)

He buscado las respuestas para ambas sin éxito; espero que tú (o alguien más que lo sepa) pueda ayudar.

Por cierto, mi objetivo final parece simple: quiero poder establecer/obtener el valor de un campo personalizado de usuario con la API. Sin embargo, estoy encontrando que es increíblemente difícil obtener una respuesta clara sobre cómo hacer esto. :frowning:

Hasta ahora he descubierto:

  1. Puedes pasar campos personalizados de forma algo aproximada a través de SSO, pero eso no es la API.
  2. Los campos personalizados parecen ser referenciados solo por número, no por nombre, cuando el front-end llama a la API (observando la solicitud XHR); obviamente, eso hace una gran diferencia si lo estoy buscando por nombre, pero en realidad es users[2].

Como puedes ver, no es obvio :wink: y pienso que el ‘get’ es más fácil, ya que será parte del registro de usuario (que ahora puedo obtener con la API), pero no puedo confirmarlo hasta que pueda ‘establecerlo’ con la API.

De todos modos… una vez que finalmente lo resuelva, ¿cómo puedo contribuir con ese conocimiento de una manera que ayude a la próxima persona que intente hacer esto?

2 Me gusta

Puedes crear un usuario con campos personalizados a través de la API pasando user_fields[1] de la siguiente manera:

curl -i -sS -X POST "http://localhost:3000/users"  \
-H "Content-Type: multipart/form-data;"  \
-H "Api-Key: d19b5a38ed13745f4c5..."  \
-H "Api-Username: system"  \
-F "name=cbbc7188c201b59ebc06"  \
-F "username=cbbc7188c201b59ebc06"  \
-F "email=cbbc7188c201b59ebc06@example.com"  \
-F "password=b6629ed30b4bc3de32ce452d171540b0"  \
-F "active=true"  \
-F "approved=true"  \
-F "user_fields[1]=a874d830b60"  \
-F "user_fields[2]=732418b131b"

Y puedes actualizarlos enviando una solicitud PUT a /u/<username>.json

7 Me gusta

/admin/customize/user_fields es una página de la interfaz de usuario donde se configuran los campos personalizados de usuario.

3 Me gusta

¡Gracias por toda esta ayuda! Por si acaso, me encantaría poder referirme a los campos de usuario por su nombre (parece mucho menos frágil), pero esta explicación y la información que me has proporcionado son enormemente útiles. Se lo agradezco mucho :slight_smile:

1 me gusta

¿Utilizas el mismo punto final POST para actualizar un usuario? ¿Son obligatorios todos los campos?

2 Me gusta

¡Hola! Quiero saber cómo obtener el índice de user_fields. ¿Debo ir al controlador web y obtener el índice? ¿Hay alguna API para obtener los user_fields? Entonces podría obtener el índice. Gracias.

1 me gusta

Puedes hacer una solicitud GET a /admin/customize/user_fields y devolverá una lista de campos de usuario:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Sistema Operativo Favorito",
      "description": "¿Cuál es tu Sistema Operativo favorito?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}
5 Me gusta

¡Gracias! Tu respuesta me es de gran ayuda.

2 Me gusta