Erreur : l'appel de retour de l'adhésion au groupe Patreon a échoué pour le nouvel utilisateur

Je suis en train de configurer un serveur Discourse avec l’intégration Patreon. J’ai reçu le message d’erreur suivant lorsque des patrons s’inscrivent sur Discourse :

Patreon group membership callback failed for new user 7 with error: undefined method `add' for nil:NilClass.
/var/www/discourse/plugins/discourse-patreon/plugin.rb:166:in `block (3 levels) in activate!'
/var/www/discourse/plugins/discourse-patreon/plugin.rb:164:in `each'
/var/www/discourse/plugins/discourse-patreon/plugin.rb:164:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:215:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:215:in `block (2 levels) in add_model_callback'

L’utilisateur s’inscrit via l’authentification Patreon. Le compte est créé, Patreon apparaît sous « Comptes associés », mais les données Patreon (Montant, Récompenses) ne sont pas ajoutées à son profil et il n’est pas ajouté au groupe. Si je clique sur « Mettre à jour les données Patreon et synchroniser les groupes », les données s’affichent et l’utilisateur est ajouté au groupe avec succès.

Ce ne sont pas de nouveaux patrons. Ils sont patrons depuis longtemps et ne rejoignent Discourse que maintenant.

J’utilise actuellement la version 2.4.0.beta4. C’est sur mon propre serveur, mais une installation standard.

Avant de mettre à jour vers cette version, j’avais désactivé le plugin, puis supprimé et recréé la clé client. (Une tentative désespérée pour résoudre un problème qui a en réalité été corrigé par la nouvelle version…) Je me demande si j’ai « cassé » la configuration autour du groupe patrons, même si il semble étrange que la synchronisation fonctionne, mais que l’inscription d’un nouvel utilisateur échoue.

Je viens de faire un test avec un utilisateur de test :

  1. Créer un utilisateur de test sur Patreon, avec un engagement envers ma campagne. (Le webhook est déclenché, mais je ne pense pas que cela soit pertinent puisque le problème se produit avec des « anciens » patrons.)
  2. Cliquer sur « Mettre à jour les données Patreon et synchroniser les groupes », attendre le message asynchrone indiquant que les données ont été mises à jour.
  3. Inscrire l’utilisateur de test sur Discourse.
  4. Vérifier les données Patreon pour l’utilisateur de test. Aucune section « Patreon » — Montant, Récompenses. L’utilisateur n’est pas inclus dans le groupe des patrons.
  5. Cliquer sur « Mettre à jour les données Patreon et synchroniser les groupes », attendre le message asynchrone indiquant que les données ont été mises à jour.
  6. Vérifier les données Patreon pour l’utilisateur de test. La section « Patreon » est maintenant présente, avec Montant et Récompenses. L’utilisateur est inclus dans le groupe des patrons.

Merci d’avance pour toute aide !

Qu’en pensez-vous, @vinothkannans ?

J’ai un peu fouillé le code et j’ai constaté que la fonctionnalité d’attribution de groupe est gérée à deux endroits :

  1. add_model_callback dans plugin.rb, qui gère l’enregistrement d’un nouvel utilisateur unique.
  2. sync_groups dans patron.rb, qui gère la synchronisation par lots de l’appartenance aux groupes pour tous les membres.

D’après mon expérience, sync_groups fonctionne, mais add_model_callback ne fonctionne pas.

J’ai remarqué que sync_groups inclut la ligne suivante :

next if group.nil?

Faut-il ajouter la même ligne dans add_model_callback ? (Avant la ligne 166.)

Cela empêcherait l’exception d’être levée, mais je ne sais pas si cela rendrait tout correct. Je ne connais ni le code ni le modèle de données, donc c’est en grande partie une supposition.

3 « J'aime »

Oui, vous avez raison. Merci pour le signalement. C’est corrigé dans le commit ci-dessous

2 « J'aime »

Merci, @vinothkannans !

3 « J'aime »