La dernière mise à jour de WP-Discourse provoque un comportement inattendu

Le dernier commit du plugin WP-Discourse attribue tous les articles personnalisés (créés via le plugin EventON) à l’utilisateur system malgré l’existence de l’utilisateur sur Discourse et WordPress.

Si nous revenons à la version 2.3.7, cela fonctionne comme prévu, mais la mise à jour vers la version 2.3.8 provoque ce bug.

Nous recevons cette erreur par e-mail :

Raison de l'échec :
 Un code de réponse 400 a été renvoyé par Discourse.
 le paramètre est manquant ou la valeur est vide : post
 Vouliez-vous dire ? post
        post[raw]
        controller
        title

Je pensais que cela pourrait aider à identifier la cause probable.

Hé, pourriez-vous partager un lien vers le plugin auquel vous faites référence ? Voyez-vous également quelque chose dans les journaux de WP Discourse ?

Salut @angus

Voici le plugin : https://www.myeventon.com/

Avez-vous besoin des journaux de la v2.3.7 ou de la v2.3.8 du plugin ?

1 « J'aime »

Les deux si possible. Veuillez activer les journaux de publication détaillés.

v2.3.7 :

[2022-02-21 08:07:11] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 
[2022-02-21 08:07:11] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 

Le post a été correctement lié à mon compte utilisateur sur WordPress et Discourse avec la version 2.3.7.

v2.3.8 :

[2022-02-21 08:10:15] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 
[2022-02-21 08:10:15] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 

Le post a été lié à mon utilisateur sur WordPress et à l’utilisateur système sur Discourse avec la version 2.3.8.

1 « J'aime »

Pouvez-vous me confirmer quelques points ?

  1. Vos types de publication personnalisés (c’est-à-dire les événements) sont publiés avec succès sur Discourse.
  2. Vous n’avez jamais vu l’erreur 400 auparavant.
  3. Quel type d’utilisateurs (dont les noms d’utilisateur Discourse sont attendus) publie des articles (c’est-à-dire s’il s’agit d’administrateurs ou non) ?
  4. Quel type de clé API utilisez-vous pour connecter WordPress à Discourse ?

Oui, les publications sont publiées avec succès mais le mauvais utilisateur (système) est attribué avec la v2.3.8

Non, nous n’avons vu aucune erreur 400 sur les versions antérieures du plugin wp-discourse.

Ces utilisateurs sont des utilisateurs enregistrés non administrateurs sur WordPress et jusqu’à présent, cela a fonctionné pour nous. tous les utilisateurs étaient correctement liés sur Discourse.

C’est une clé API globale

1 « J'aime »

Lorsque cette PR sera fusionnée (et la version publiée sur Wordpress.org), la fonctionnalité fonctionnera comme vous l’attendez.

2 « J'aime »

Je rencontre la même erreur et je peux confirmer qu’elle a commencé après la mise à niveau de WP Discourse vers la version 2.3.8.

Avec cette version, les sujets sont créés, mais avec l’utilisateur par défaut.

Pour confirmer, j’ai rétabli WP Discourse à la version 2.3.7, et cela fonctionne à nouveau.

2 « J'aime »

Merci, cela sera traité lorsque la PR sera fusionnée. Pourriez-vous confirmer ces deux questions également

  • Quel type d’utilisateurs (dont les noms d’utilisateur Discourse sont attendus) publient des articles (c’est-à-dire sont-ils administrateurs ou non)
  • Quel type de clé API utilisez-vous pour connecter Wordpress à Discourse

Même problème ici. Pas un type de publication personnalisé.

pas un utilisateur administrateur, mais un modérateur
Une clé API « tous les utilisateurs ».

  • Les utilisateurs sont des modérateurs et certains administrateurs
  • API « Tous les utilisateurs »

Salut tout le monde, la version 2.3.9 est maintenant disponible avec une correction pour ce problème. Veuillez mettre à jour et me faire savoir comment cela se passe.

1 « J'aime »

Nous rencontrons le même problème avec la version 2.3.9, et nous revenons à la version 2.3.7, et désactivons la mise à jour automatique de ce plugin à l’avenir.

1 « J'aime »

Salut @angus

Désolé pour le bruit, mon problème semble avoir été résolu sur WordPress 5.9.1 et WP Discourse 2.3.9

Mais, il semble que Discourse effectue maintenant un travail supplémentaire sur chaque publication publiée et que la propriété est transférée de l’utilisateur Système à l’utilisateur qui publie après coup ?

1 « J'aime »

Salut @orenwolf, je suis désolé d’apprendre que vous rencontrez toujours un problème. Pourriez-vous confirmer que les utilisateurs que vous attendez de publier sous leur propre nom ont un Nom d'utilisateur Discourse dans leur profil Wordpress ?


En général, merci de votre patience à ce sujet. Lors de mes propres tests sur divers sites (et dans les tests unitaires du plugin), la fonctionnalité Nom d'utilisateur Discourse fonctionne désormais comme prévu sur la version 2.3.9. Si vous rencontrez toujours un problème, veuillez confirmer que vous utilisez la dernière version du plugin et que l’utilisateur dont vous attendez qu’il soit l’auteur de la publication a un Nom d'utilisateur Discourse.

Vous vous demandez peut-être pourquoi ce problème est survenu. Je pense qu’il sera utile de donner un peu de contexte (ce qui répondra également à votre question @itsbhanusharma). Auparavant, cette fonctionnalité fonctionnait en utilisant différents utilisateurs dans l’en-tête Api-Username (voir ici). La raison pour laquelle cela était jugé nécessaire est que le point de terminaison pertinent dans Discourse ne prend pas en charge la définition d’un créateur de publication différent de l’utilisateur effectuant la requête API.

Le résultat a été que la seule façon pour que cette fonctionnalité fonctionne était d’avoir une clé API « Tous les utilisateurs » avec une portée « Globale ». Je noterai que pendant un certain temps, les instructions standard pour créer une clé API pour le plugin WP Discourse sont les suivantes :

Si vous n’avez pas encore créé de clé API, cliquez sur « Nouvelle clé API », définissez le niveau d’utilisateur sur « Utilisateur unique », définissez « Utilisateur » sur un compte administrateur, sélectionnez « Clé globale » et cliquez sur « Enregistrer ». Copiez et collez la clé API ici.

Suivre ces instructions signifierait que cette fonctionnalité (non documentée) ne fonctionnerait pas, et cela a causé des problèmes pour divers sites.

De plus, pour diverses raisons de sécurité, j’ai progressivement apporté des modifications au plugin pour permettre l’utilisation de clés API beaucoup plus spécifiques. Cela nécessitera une modification de Discourse et (lorsqu’elle sera fusionnée) permettra aux administrateurs de plugin de s’émettre une nouvelle clé API beaucoup plus limitée. Je ferai une annonce à ce sujet le moment venu.

Oui @itsbhanusharma, la façon dont la fonctionnalité fonctionne maintenant est en effectuant une deuxième requête pour changer le propriétaire de la publication après sa création (si un Nom d'utilisateur Discourse est présent). C’est en fait actuellement la seule façon appropriée de définir arbitrairement le propriétaire d’une publication via l’API Discourse (sans avoir besoin d’utiliser Api-Username et une clé globale pour tous les utilisateurs comme décrit ci-dessus). Compte tenu du type d’opération, cela ne devrait pas poser de problème de performance.

4 « J'aime »

Ce n’est pas un problème de performance, c’est juste une nuisance d’expliquer aux personnes moins averties que l’icône de crayon en haut de leur message est normale et que c’est comme ça que ça va être.

Cela prendra du temps, mais nous finirons par nous y habituer.

Il est quelque peu déconcertant que les publications soient affichées comme modifiées, mais cela ne pose pas de problème tant que tout fonctionne.

Cependant, le fait que les notifications soient erronées est un problème. Elles indiquent que la nouvelle publication a été créée par l’utilisateur système.

Jusqu’à présent, cela ressemble plus à un correctif qu’à une solution. C’est certainement un grand pas en arrière de ne pas pouvoir simplement publier automatiquement en tant qu’utilisateur approprié. Je ne suis pas sûr de comprendre ce qui a causé cette défaillance en premier lieu.

La version courte est que j’ai lentement modifié la façon dont le plugin gère toutes ses requêtes à discourse pour diverses raisons, notamment les tests et la sécurité. Le contexte complet et la justification des changements sont trop longs pour être abordés ici. J’apprécie que, dans le contexte de cette fonctionnalité particulière, cela puisse donner l’impression de « si ça ne casse pas, ne le répare pas », cependant, il y a un contexte plus large ici.

Ces changements sont en cours depuis un certain temps (des mois), cependant, la raison pour laquelle ils refont surface maintenant est que j’ai fait une erreur dans la version 2.3.8. J’ai donc inclus le changement qui aurait dû figurer dans cette version dans 2.3.9.

Cela dit, @jtbayly @itsbhanusharma, j’entends vos commentaires sur l’approche différente de cette fonctionnalité particulière. Je comprends que cela puisse sembler être un hack. Ce n’est pas le cas. Néanmoins, compte tenu de vos commentaires, je vais réintégrer l’ancienne méthode dans le plugin derrière un paramètre que vous pourrez utiliser si vous le souhaitez (il sera mis en ligne dans 2.4.0). Je ferai un suivi avec une note lorsque cela sera fusionné dans les prochains jours.

J’espère pouvoir supprimer complètement cette approche lorsque j’aurai résolu les problèmes que vous avez tous deux soulevés, très probablement avec d’autres changements à discourse/discourse. Comme mentionné, je ferai une annonce plus large sur les changements dans la façon dont le plugin gère les clés API dans le mois prochain (en fonction de la date de fusion des changements dans discourse/discourse), ce qui couvrira certains aspects de cela.

4 « J'aime »

Quand j’ai dit cela, je voulais reconnaître que je n’étais pas sûr s’il y avait une autre façon d’avancer. Ce n’était pas un commentaire du genre “pourquoi as-tu cassé ça !”.
Je suis très reconnaissant pour votre travail à maintenir le plugin WP fonctionnel avec un cœur Discourse mis à jour. Et je suis très heureux qu’il y ait (probablement) des changements à venir dans le cœur qui permettront d’améliorer ce domaine.

1 « J'aime »