Excluir avatar do usuário pela API

Olá!

Temos um aplicativo de fórum Discourse conectado ao nosso app via SSO. Os avatares dos usuários são atualizados diretamente por meio dele. No entanto, nossas fotos são moderadas, então precisamos limpar os avatares dos usuários no lado do aplicativo Discourse.

Isso pode ser feito de alguma forma por meio da API REST ou por melhorias no mecanismo SSO? Não consegui encontrar essa informação na documentação.

Obrigado!

1 curtida

Você deve ser capaz de chamar a rota sync_sso para re-sincronizar o avatar do usuário, mas também pode fazer uma solicitação PUT para http://localhost:3000/u/<username>/preferences/avatar/pick com um upload_id vazio

para excluir o avatar atual do usuário e atribuir a ele um avatar de letra.

4 curtidas

@blake Erro ao enviar esta solicitação. Usei uma solicitação POST.
{
“failed”: “FALHA”
}

Você tentou usar PUT, como recomendado?

1 curtida

@pfaffman desculpe, usei put

2 curtidas

Você precisará usar o endpoint sync_sso se tiver sso overrides avatar habilitado.

2 curtidas

Usamos o endpoint de SSO, mas ele atualiza o avatar do usuário apenas no login. No nosso caso, precisamos atualizá-lo manualmente.

1 curtida

Sim, tudo bem. Você pode fazer uma solicitação POST manualmente para o endpoint sync_sso a qualquer momento.

1 curtida

Você poderia, por favor, anexar o link da documentação da API para esse endpoint?

1 curtida

Aqui está um código Ruby que você pode usar, que utiliza o gem discourse_api, para que você possa usá-lo como referência. O endpoint sync_sso é um pouco diferente dos outros endpoints, porque você precisa enviar um payload assinado.

client = DiscourseApi::Client.new('host')
client.api_key = 'api_key'
client.api_username = 'api_username'
puts client.sync_sso(
  sso_secret: 'abcdefghij',
  username: '24db27218ed09205a5a0',
  name: '24db27218ed09205a5a0',
  email: '24db27218ed09205a5a076983bf241ab@example.com',
  external_id: '684',
  avatar_url: 'https://d3bpeqsaub0i6y.cloudfront.net/user_avatar/meta.discourse.org/codinghorror/240/110067_2.png',
)
2 curtidas

Estou correto ao afirmar que podemos enviar POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... ??
Os parâmetros ‘sso’ e ‘sig’ são semelhantes aos do fluxo de autorização SSO?

Tentei realizar a solicitação conforme explicado acima POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... e ela retornou 200 com meu usuário, mas o avatar do usuário não foi atualizado e não houve eventos de log. O que estou fazendo de errado?

Você deve incluir o api_key e o api_username no cabeçalho HTTP, pois usá-los nos parâmetros de consulta está obsoleto.

Acho que deve haver alguma proteção no código que impede a exclusão acidental de um avatar se o campo for omitido ou estiver vazio. Provavelmente, você precisará fornecer uma URL para um avatar padrão para substituir o avatar existente.

Substituí as credenciais da API por cabeçalhos.
A sincronização SSO não atualizou o avatar do usuário com o fornecido. Embora o trabalho Sidekiq nessa chamada tenha sido concluído e não houvesse logs de erro ou aviso.

Você pode ativar os logs verbosos de SSO nas configurações do site para ver se algo aparece lá.

A avatar_url que você está fornecendo é pública? Seu site Discourse precisará poder acessá-la.

1 curtida