Come modificare i campi utente con l'API

(Modifica: vedi il 2° post per la soluzione: come modificare i campi utente con l’API)

@sam, hai menzionato (in un post di un argomento ora chiuso) riguardo a qualcuno che voleva usare l’API per aggiornare un campo personalizzato in un record utente: “il campo deve essere inserito nella whitelist; puoi aggiungerlo a /admin/customize/user_fields o questo campo è destinato a essere completamente nascosto agli utenti?”

Due domande rapide:

  1. Cos’è l’endpoint /admin/customize/?
  2. Come si “inserisce un campo nella whitelist”? (Cosa significa esattamente—metterlo nella whitelist in modo che l’API possa accedervi, in qualche modo?!)

Ho cercato le risposte a entrambe queste domande senza successo; spero che tu (o qualcun altro che lo sappia) possa aiutarmi.

A proposito, il mio obiettivo finale sembra semplice: voglio poter impostare/recuperare il valore di un campo utente personalizzato tramite l’API. Eppure sto scoprendo che è incredibilmente difficile ottenere una risposta chiara su come farlo. :frowning:

Finora ho capito che:

  1. Si possono in qualche modo passare i campi personalizzati tramite SSO, ma questo non è l’API
  2. I campi personalizzati sembrano essere referenziati solo per numero, non per nome, quando il front-end chiama l’API (osservando la richiesta XHR) — ovviamente questo fa una grande differenza se sto cercando per nome ma in realtà è users[2]

Come vedi, non è affatto ovvio :wink: e penso che l’operazione ‘get’ sia più semplice, dato che farà parte del record utente (che ora posso ottenere con l’API), ma non posso confermarlo finché non riesco a ‘impostarlo’ con l’API.

Comunque… una volta che finalmente capirò come fare, come posso contribuire a condividere questa conoscenza in modo da aiutare la prossima persona che proverà a farlo?

2 Mi Piace

You can create a user with custom fields via the API by passing in user_fields[1] like this:

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"

image

And you can update them by sending a PUT request to /u/<username>.json

7 Mi Piace

/admin/customize/user_fields is a UI page where the custom user fields are configured.

3 Mi Piace

Thank you for all of this help! FWIW I’d love to see the ability to refer to user_fields by their name (seems much less brittle?) but this explanation and info you’ve provided me is enormously helpful. I appreciate it :slight_smile:

1 Mi Piace

Utilizzi lo stesso endpoint POST per aggiornare un utente? Sono richiesti tutti i campi?

2 Mi Piace

Ciao! Voglio sapere come ottenere l’indice di user_fields? Dovrei andare al web controller e ottenere l’indice? Esiste un’API per ottenere i user_fields? Poi potrei ottenere l’indice. Grazie.

1 Mi Piace

Puoi effettuare una richiesta GET a /admin/customize/user_fields e restituirà un elenco di campi utente:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Sistema Operativo Preferito",
      "description": "Qual è il tuo sistema operativo preferito?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}
5 Mi Piace

Grazie. La tua risposta mi è molto utile!

2 Mi Piace