Como alterar campos de usuário com a API

(Edição: veja a 2ª postagem para a solução: como alterar campos de usuário com a API)

@sam, você mencionou (em uma postagem de um tópico agora fechado) a respeito de alguém que queria usar a API para atualizar um campo personalizado em um registro de usuário: “o campo precisa estar na lista de permissões; você pode adicioná-lo em /admin/customize/user_fields ou esse campo é destinado a ficar completamente oculto dos usuários?”

Duas perguntas rápidas:

  1. O que é o endpoint /admin/customize/?
  2. Como se “coloca um campo na lista de permissões”? (O que isso significa — colocá-lo na lista de permissões para que a API possa acessá-lo, de alguma forma?!)

Procurei as respostas para ambas sem sucesso; espero que você (ou alguém que saiba) possa ajudar.

Aliás, meu objetivo final parece simples: quero poder definir/obter o valor de um campo personalizado de usuário por meio da API. No entanto, estou achando incrivelmente difícil obter uma resposta clara sobre como fazer isso. :frowning:

Até agora, descobri o seguinte:

  1. É possível, de certa forma, passar campos personalizados via SSO, mas isso não é a API.
  2. Os campos personalizados parecem ser referenciados apenas por número, e não por nome, quando o front-end chama a API (observando a requisição XHR) — obviamente, isso faz uma grande diferença se estou procurando por nome, mas o campo é realmente users[2].

Como você pode ver, não é óbvio :wink: e imagino que o “get” seja mais fácil, já que fará parte do registro do usuário (que já consigo obter agora com a API), mas não posso confirmar até que consiga fazer o “set” por meio da API.

De qualquer forma… quando finalmente resolver isso, como posso contribuir com esse conhecimento de uma forma que ajude a próxima pessoa que tentar fazer isso?

2 curtidas

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 curtidas

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

3 curtidas

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 curtida

Você usa o mesmo endpoint POST para atualizar um usuário? Todos os campos são obrigatórios?

2 curtidas

Olá! Quero saber como obter o índice de user_fields? Devo ir ao web controller e obter o índice? Existe uma API para obter os user_fields? Assim, eu poderia obter o índice. Obrigado.

1 curtida

Você pode fazer uma solicitação GET para /admin/customize/user_fields e ela retornará uma lista de campos de usuário:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Sistema Operacional Favorito",
      "description": "Qual é o seu sistema operacional favorito?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}
5 curtidas

Obrigado. Sua resposta é muito útil para mim!

2 curtidas