Comment modifier les champs utilisateur avec l'API

(Édition : consultez le 2e message pour la solution : comment modifier les champs utilisateur avec l’API)

@sam, vous avez mentionné (dans un message d’un sujet maintenant clos) concernant quelqu’un qui souhaitait utiliser l’API pour mettre à jour un champ personnalisé dans un enregistrement utilisateur : « le champ doit être autorisé (whitelisted) ; pouvez-vous l’ajouter à /admin/customize/user_fields ou ce champ est-il censé être totalement masqué aux utilisateurs ? »

Deux questions rapides :

  1. Qu’est-ce que le point de terminaison /admin/customize/ ?
  2. Comment « autoriser » (whitelist) un champ ? (Que signifie cela — l’autoriser afin que l’API puisse y accéder, d’une manière ou d’une autre ?!)

J’ai cherché les réponses à ces deux questions sans succès ; j’espère que vous (ou quelqu’un d’autre qui connaît le sujet) pourrez m’aider.

Au fait, mon objectif ultime semble simple : je veux pouvoir définir et récupérer la valeur d’un champ utilisateur personnalisé via l’API. Pourtant, je trouve incroyablement difficile d’obtenir une réponse claire sur la manière de procéder. :frowning:

Jusqu’à présent, j’ai compris :

  1. On peut passer des champs personnalisés via SSO, mais ce n’est pas l’API.
  2. Les champs personnalisés semblent être référencés uniquement par leur numéro et non par leur nom lorsque le front-end appelle l’API (en surveillant la requête XHR) — cela fait évidemment une grande différence si je les cherche par nom alors qu’ils sont en réalité users[2].

Comme vous pouvez le voir, ce n’est pas évident :wink: et je suppose que l’opération de « récupération » (get) est plus simple puisqu’elle fait partie de l’enregistrement utilisateur (que je peux déjà récupérer avec l’API), mais je ne peux pas le confirmer tant que je ne peux pas « définir » (set) la valeur via l’API.

En tout cas… une fois que j’aurai enfin résolu ce problème, comment puis-je contribuer à partager cette connaissance d’une manière qui aidera la prochaine personne qui tentera de faire la même chose ?

Vous pouvez créer un utilisateur avec des champs personnalisés via l’API en transmettant user_fields[1] comme ceci :

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"

Vous pouvez également les mettre à jour en envoyant une requête PUT vers /u/<username>.json

/admin/customize/user_fields est une page d’interface utilisateur où les champs personnalisés des utilisateurs sont configurés.

Merci pour toute cette aide ! À titre d’information, j’aimerais beaucoup voir la possibilité de faire référence aux user_fields par leur nom (cela semble beaucoup moins fragile), mais cette explication et les informations que vous m’avez fournies m’ont été énormément utiles. Je vous en suis reconnaissant :slight_smile:

Utilisez-vous le même point de terminaison POST pour mettre à jour un utilisateur ? Tous les champs sont-ils requis ?

Bonjour ! Je voudrais savoir comment obtenir l’index de user_fields ? Dois-je aller dans le contrôleur web et obtenir l’index ? Existe-t-il une API pour obtenir les user_fields ? Ensuite, je pourrai obtenir l’index. Merci.

Vous pouvez faire une requête GET à /admin/customize/user_fields et elle retournera une liste de champs utilisateur :

{
  "user_fields": [
    {
      "id": 2,
      "name": "Système d'exploitation préféré",
      "description": "Quel est votre système d'exploitation préféré ?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}

Merci. Votre réponse m’est très utile !