Je suis en train d’intégrer l’authentification unique (SSO) de Discourse, mais je rencontre un problème : l’utilisateur créé se voit attribuer des privilèges d’administrateur, alors que la charge utile SSO indique explicitement qu’il ne devrait pas en avoir.
Je suis sur la dernière version bêta : 2.8.0.beta6 [ f3273bd43e ].
Voici un exemple :
Je viens de tester avec omar+member9@306.dev, qui est un domaine totalement différent et qui ne figure pas dans DISCOURSE_DEVELOPER_EMAILS, mais le problème persiste : l’utilisateur a obtenu un accès administrateur.
La clé API que j’utilise pour signer le SSO appartient à un administrateur. Est-ce que cela peut avoir une incidence ?
Je viens d’intégrer SSO sur un site Discourse existant et je rencontre ce comportement.
Le site fonctionne sous Docker (dépôt discourse_docker).
Je me suis connecté au conteneur et j’ai accédé à la base de données PostgreSQL. Le drapeau admin de l’utilisateur est défini à false dans la base, il n’est donc pas mis à jour par la méthode make_developer_admin.
Pour faciliter le débogage de DiscourseConnect, vous pouvez activer le paramètre du site verbose_discourse_connect_logging. En activant ce paramètre, des diagnostics détaillés s’afficheront dans VOTRESITE.com/logs. Assurez-vous de cocher la case warnings en bas de VOTRESITE.com/logs.
Il semble s’agir d’un bug de filtrage lié à l’API ActiveRecord. J’ai enregistré les requêtes et je ne vois pas d’ID utilisateur dans le filtre WHERE, ce qui suggère que les données de notification sont récupérées globalement.
Je pense que la même chose se produit avec les forums et les sujets : le filtre d’ID utilisateur est ignoré et tout est récupéré.
Il semble que user.notifications n’ajoute pas le filtre. J’ai ajouté manuellement une condition where dans le code, ce qui a corrigé l’affichage des notifications dans la fenêtre modale. Cependant, la page de détails utilise un autre chemin de code, elle affiche donc toujours tout. Quelle est la vraie solution ?
J’ai lancé un nouveau conteneur Docker à partir de zéro et déplacé les assets/données, cela a résolu le problème.
La reconstruction du conteneur existant n’a pas aidé.