Necesito ayuda para actualizar la información del perfil a través de la API

He encontrado algunos ejemplos en estos foros de cómo actualizar información de usuario a través de la API, pero no consigo que funcione. Soy un desarrollador junior, así que quizás me esté perdiendo algo obvio.

Primero intenté hacer funcionar este ejemplo:
curl -X PUT -d 'name=new name’ -L 'https://mysite.com/users/user12345.json?api_key=mykey\u0026api_username=username'

pero obtengo [“BAD CSRF”], así que probé esto:

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'

esto devuelve “success”:“OK”, seguido de todo el json del usuario, pero en realidad no realiza ninguna actualización.

¿Me estoy perdiendo algo?

En una nota relacionada: ¿puedes actualizar el nombre de usuario usando el mismo enfoque?

Gracias por tu ayuda.

Sí, esta forma ha sido obsoleta en favor de pasar las credenciales en la cabecera (como se muestra a continuación).

Mezclaste los caracteres de las comillas: " y . Esta podría ser la razón aquí. :thinking:

4 Me gusta

Gracias @Arkshine. Me he asegurado de que todos los caracteres de cita sean los mismos \", pero todavía no funciona.

No puedo averiguar cuál es el problema.

¿Has probado Reverse engineer the Discourse API para comprobar qué sucede cuando usas la interfaz de usuario para realizar el cambio?

Me funciona cuando envío una solicitud PUT a, por ejemplo, /u/test_one.json

1 me gusta

Gracias @JammyDodger. Hice lo que sugeriste y actualicé el nombre en la interfaz de administración y luego miré en la pestaña de red. Como mencionaste, hace la actualización en una URL diferente (/u en lugar de /users), pero cuando cambio la URL, todavía no funciona.

En “Form Data”, estoy mirando la solicitud y es: name: "newname" tal como la estoy enviando.

Hasta donde puedo ver, todo parece correcto y todavía no se actualiza. Estoy desconcertado.

Ok… Pasé mucho más tiempo investigando en los foros y encontré un problema similar de hace 7 años. ¡Resulta que si actualizas el Content-Type a “application/json; charset=utf-8”, funciona!

Tengo un último problema: ¿cómo actualizo el nombre de usuario a través de la API?

He intentado hacer algo como esto, pero no funciona:

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

1 me gusta

Ok… Finalmente pude resolver esto. Dejaré un pequeño resumen aquí en caso de que alguien en el futuro esté buscando cómo hacer esto. Las otras respuestas que encontré en los foros estaban desactualizadas.

Para actualizar el nombre a través de la 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 actualizar el nombre de usuario a través de la 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 Me gusta

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