Aggiornamento del campo utente personalizzato tramite API

Ho provato a fare il reverse engineering dell’aggiornamento di un valore user_field.

L’ho fatto seguendo i passaggi in Reverse engineer the Discourse API, ho modificato un utente di prova e ho preso nota di ciò che stava accadendo nella scheda di rete del browser.

Vedo che devo fare una PUT a questo URL: https://example.com/u/my-username-here.json

Dove mi sono un po’ confuso è stato non vedere un payload json ma invece del formdata. Il payload era: user_fields%5B1%5D=some+dji%2C+some+Autel\u0026user_fields%5B5%5D=%40UKDroneClub\u0026user_fields%5B6%5D=%40iKiteFlyer\u0026user_fields%5B8%5D=test\u0026timezone=Europe%2FLondon\u0026default_calendar=none_selected

Desidero aggiornare solo un valore user_field,

È codificato in URL: user_fields%5B8%5D=test

E decodificato, si legge: user_fields[8]=test

(8 = l’id del user_field che voglio aggiornare)

Come posso convertire questo valore di dati del modulo in un payload json in modo da poter poi fare una PUT? :thinking:

2 Mi Piace

Non sono sicuro di cosa sto sbagliando qui, ma riesco ad aggiornare la sezione “Informazioni su di me” del profilo di un utente tramite una chiamata API, ma non riesco ad aggiornare nessuno dei user_fields.

Se monitoro il mio browser durante la modifica di un utente, posso vedere che esegue un PUT di quanto segue:

bio_raw=aboutmetest&user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=qwerty&timezone=Europe%2FLondon&default_calendar=none_selected

Sto usando il seguente codice per effettuare la mia chiamata API PUT:

' Aggiungi alcune intestazioni
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' Aggiungi alcuni parametri del corpo del modulo
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

Ogni volta che effettuo la chiamata API, puntualmente, il valore bio_raw viene aggiornato all’ora corrente (come test).

Ma per qualche motivo il valore user_fields[8] non viene aggiornato affatto. Nessun errore, semplicemente non si aggiorna.

Ho provato sia a codificarlo in URL come user_fields%5B8%5D che come testo normale user_fields[8], ma nessuno dei due ha alcun effetto.

Mi sfugge qualcosa di ovvio? :thinking:

AARRGGHHH :man_facepalming:

Sì, sì che mi sfuggiva.

Questo:

Impedisce la modifica del campo utente quando la chiamata API viene eseguita dall’utente.

Ovviamente sì :exploding_head:

Se rielaboro la mia chiamata API ed eseguo la chiamata come system, funziona bene :roll_eyes:

6 Mi Piace

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