Atualizando campo de usuário personalizado através da API

Tenho tentado fazer a engenharia reversa da atualização de um valor de user_field.

Fiz isso seguindo os passos em Reverse engineer the Discourse API, editei um usuário de teste e anotei o que estava ocorrendo na aba de rede do navegador.

Vejo que preciso fazer um PUT para esta URL: https://example.com/u/my-username-here.json

Onde fiquei um pouco confuso foi por não ver uma carga útil JSON, mas em vez disso, é um formdata. A carga útil foi: user_fields%5B1%5D=some+dji%2C+some+Autel%26user_fields%5B5%5D=%40UKDroneClub%26user_fields%5B6%5D=%40iKiteFlyer%26user_fields%5B8%5D=test%26timezone=Europe%2FLondon%26default_calendar=none_selected

Eu só desejo atualizar um valor de user_field,
Está codificado em URL: user_fields%5B8%5D=test

E decodificado, lê-se: user_fields[8]=test

(8 = o id do user_field que quero atualizar)

Como eu converteria esse valor de formdata em uma carga útil JSON para que eu possa então fazer um PUT? :thinking:

2 curtidas

Não tenho certeza do que estou fazendo de errado aqui, mas consigo atualizar a seção “Sobre mim” do perfil de um usuário por meio de uma chamada de API, mas não consigo atualizar nenhum dos user_fields.

Se eu monitorar meu navegador ao editar um usuário, posso ver que ele está fazendo um PUT do seguinte:

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

Estou usando o seguinte código para fazer minha chamada PUT de API:

' Adicionar alguns cabeçalhos
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' Adicionar alguns parâmetros de corpo de formulário
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

Toda vez que faço a chamada de API, o valor bio_raw é atualizado para o timestamp atual (como teste).

Mas, por algum motivo, o valor user_fields[8] não é atualizado. Sem erros, ele simplesmente não atualiza.

Tentei codificá-lo em URL como user_fields%5B8%5D e também tentei como texto simples user_fields[8], mas nenhum deles tem efeito.

Estou perdendo algo óbvio aqui? :thinking:

AARRGGHHH :man_facepalming:

Sim, sim eu estava.

Isto:

Impede a edição do campo do usuário quando a chamada da API é realizada pelo usuário.

Claro que sim :exploding_head:

Se eu refizer minha chamada de API e realizá-la pelo system, funciona bem :roll_eyes:

6 curtidas

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