Obter /users/by-external/ lançando erro URL Não Encontrado após atualização

Estou atualizando meus fóruns de 1.6 para 3.1, o que envolveu a migração para um novo servidor, restauração de backup e reconexão de tudo.

Usamos SSO para login em ambos, o que ainda funciona.

No entanto, o Discourse agora parece apresentar erros em algumas áreas aleatórias, o que está causando problemas na criação de contas a partir do site usando a API.
Estávamos usando a gem ruby discourse_api na versão 0.10.1, que atualizei para 0.48.1.

O erro ocorre em
DiscourseApiService.new.user(self)

que chama
resp = client.get("/users/by-external/#{user.id}")

que lança o erro
{"errors"=>["O URL ou recurso solicitado não pôde ser encontrado."], "error_type"=>"not_found"}

Isso costumava funcionar bem, mas agora, por algum motivo, o URL não é encontrado.

Tentei rebaixar a gem discourse_api para 0.10.1 novamente, que é o que estávamos executando anteriormente, e ela passa pelo estágio client.get normalmente, mas falha na próxima chamada com o mesmo erro:

client.sync_sso(

{"errors"=>["O URL ou recurso solicitado não pôde ser encontrado."], "error_type"=>"not_found"}

O endpoint mudou para /u/by-external/{external_id}.json em algum momento. E uma chave de API e nome de usuário são necessários para esse endpoint.

1 curtida

Eu consegui resolver
Parece que eles atualizaram o código para realmente lançar um erro se nenhum usuário for encontrado, então tive que usar rescue em vez de comparar com nil?

begin
    resp = client.get("/users/by-external/#{user.id}")
rescue DiscourseApi::NotFoundError => error
    puts error.response.body['errors'].first
    sync_user(user)
else
    resp.response.env.body['user']
end

Além disso, a resposta mudou de
resp['body']['user']
para
resp.response.env.body['user']

Meu último problema restante é que, quando chamo client.sync_sso, recebo um erro interno do servidor 500 agora

Os logs mostram
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey")

No entanto, se eu usar os mesmos detalhes no terminal do Rails e executar client.sync_sso, ele funciona perfeitamente

Apenas para informação, eu não mudei o endpoint para que as partes acima voltassem a funcionar, então parece que /users/by-external/ ainda é válido

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