Get /users/by-external/ lance une erreur URL Not Found après la mise à jour

J’ai mis à jour mes forums de la version 1.6 à la 3.1, ce qui a impliqué de migrer vers un nouveau serveur, de restaurer une sauvegarde, puis de tout reconnecter.

Nous utilisons l’authentification unique (SSO) pour nous connecter aux deux, ce qui fonctionne toujours.

Cependant, Discourse semble maintenant générer des erreurs dans certaines zones aléatoires, ce qui pose un problème lors de la création de comptes à partir du site web via l’API.
Nous utilisions la gem Ruby discourse_api dans sa version 0.10.1, que j’ai mise à jour à la version 0.48.1.

L’erreur se produit à :
DiscourseApiService.new.user(self)

Ce qui appelle :
resp = client.get("/users/by-external/#{user.id}")

Ce qui génère l’erreur :
{"errors"=>["L'URL ou la ressource demandée n'a pas pu être trouvée."], "error_type"=>"not_found"}

Cela fonctionnait correctement auparavant, mais maintenant, pour une raison quelconque, l’URL ne peut pas être trouvée.

J’ai essayé de rétrograder la gem discourse_api à la version 0.10.1, celle que nous utilisions précédemment, et cela passe le stade de client.get sans problème, mais échoue à l’appel suivant avec la même erreur :

client.sync_sso(

{"errors"=>["L'URL ou la ressource demandée n'a pas pu être trouvée."], "error_type"=>"not_found"}

Le point de terminaison a changé pour /u/by-external/{external_id}.json à un moment donné. Une clé API et un nom d’utilisateur sont requis pour ce point de terminaison.

1 « J'aime »

J’ai en fait réussi à le résoudre

Il semble qu’ils aient mis à jour le code pour générer une erreur si aucun utilisateur n’est trouvé, j’ai donc dû utiliser rescue au lieu de comparer si 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

De plus, la réponse a changé de
resp['body']['user']
à
resp.response.env.body['user']

Mon dernier problème restant est que lorsque j’appelle client.sync_sso, j’obtiens maintenant une erreur interne du serveur 500

Les journaux indiquent
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey"

Cependant, si j’utilise les mêmes détails dans le terminal Rails et que j’exécute client.sync_sso, cela fonctionne parfaitement.

Juste pour information, je n’ai pas modifié le point de terminaison pour que les parties ci-dessus recommencent à fonctionner, il semble donc que /users/by-external/ soit toujours valide.

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