Preciso de ajuda para atualizar informações do perfil via API

Encontrei alguns exemplos nestes fóruns de como atualizar informações de usuário via API, mas não consigo fazer funcionar. Sou um desenvolvedor júnior, então talvez esteja perdendo algo óbvio.

Primeiro, tentei fazer este exemplo funcionar:
curl -X PUT -d 'name=new name’ -L 'https://mysite.com/users/user12345.json?api_key=mykey\u0026api_username=username'

mas recebo ["BAD CSRF"] e então tentei isto:

curl -X PUT \
  -H "Content-Type: multipart/form-data" \
  -H "Api-Key: mykey" \
  -H "Api-Username: username" \
  -d '{"name”: “new name"}' \
  -L 'https://mysite.com/users/user12345.json'

isso retorna “success”:“OK”, seguido por todo o json do usuário, mas na verdade não faz nenhuma atualização.

Estou perdendo alguma coisa?

Em uma nota relacionada: você consegue atualizar o nome de usuário usando a mesma abordagem?

Obrigado pela sua ajuda.

Sim, esta forma foi descontinuada em favor de passar as credenciais no cabeçalho (como abaixo).

Você misturou caracteres de citação: \" e . Este pode ser o motivo aqui. :thinking:

4 curtidas

Obrigado @Arkshine. Certifiquei-me de que todos os caracteres de citação são os mesmos \", mas ainda não está funcionando.

Não consigo descobrir qual é o problema.

Você já tentou Reverse engineer the Discourse API para verificar o que acontece quando você usa a interface do usuário para fazer a alteração?

Funciona para mim ao enviar uma solicitação PUT para, por exemplo, /u/test_one.json

1 curtida

Obrigado @JammyDodger. Fiz como você sugeriu e atualizei o nome na interface de administração e depois olhei na aba de rede. Como você mencionou, ele faz a atualização em uma URL diferente (/u em vez de /users), mas quando eu mudo a URL, ainda não está funcionando.

Em "Form Data", estou olhando a requisição e é: name: \"newname\" exatamente como estou enviando.

Pelo que posso ver, tudo parece certo e ainda não está atualizando. Empacado.

Ok… Passei muito mais tempo pesquisando nos fóruns e encontrei um problema semelhante de 7 anos atrás. Descobri que, se você atualizar o Content-Type para "application/json; charset=utf-8", funciona!

Tenho um último problema: como atualizo o nome de usuário pela API?

Tentei fazer algo assim, mas não funciona:

-d '{\"name”: “new name\", \"username\": \"new username\"}' \\

1 curtida

Ok… Finalmente consegui descobrir isso. Deixarei um pequeno resumo aqui caso alguém no futuro esteja procurando como fazer isso. As outras respostas que encontrei nos fóruns estavam desatualizadas.

Para atualizar o nome via API:
curl -X PUT -H \"Content-Type: application/json; charset=utf-8\" -H \"Api-Key: mykey\" -H \"Api-Username: username\" -d '{\"name\": “mynewname\"}' -L 'https://mysite.com/u/user12345.json'

Para atualizar o nome de usuário via API:
curl -X PUT -H \"Content-Type: application/json; charset=utf-8\" -H \"Api-Key: myapikey\" -H \"Api-Username: username\" -d '{\"new_username\": \"mynewusername\"}' -L 'https://mysite.com/u/user12345/preferences/username.json'

4 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.