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?

Puoi creare un utente con campi personalizzati tramite l’API passando user_fields[1] in questo modo:

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"

E puoi aggiornarli inviando una richiesta PUT a /u/<username>.json

/admin/customize/user_fields è una pagina dell’interfaccia utente dove vengono configurati i campi utente personalizzati.

Grazie per tutto questo aiuto! Tanto per dire, mi piacerebbe poter fare riferimento ai campi utente tramite il loro nome (sembra molto meno soggetto a errori), ma questa spiegazione e le informazioni che mi hai fornito sono estremamente utili. Te ne sono grato :slight_smile:

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

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.

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
    }
  ]
}

Grazie. La tua risposta mi è molto utile!