J’essaie de récupérer programmatiquement des informations sur un groupe via l’API Discourse. J’ai le code pour cela dans mon tableau de bord personnalisé, sous . Je suis administrateur de mon forum.
Cela ne fonctionne pas, et je pense que cela peut être dû au fait que je ne comprends pas comment fonctionnent les clés API.
Si je veux que Discourse effectue un appel à l’API pour récupérer des informations sur un groupe à chaque fois qu’un utilisateur visite une page donnée, quelle est la bonne configuration de clé API ?
Voici ce que j’ai jusqu’à présent :
Dans mon tableau de bord, je suis allé dans API → Nouvelle clé API. Là, je dois sélectionner « Niveau utilisateur ». Désolé pour cette question basique, mais que signifie « Niveau utilisateur » ici ? (l’appel API doit s’exécuter à chaque fois qu’un utilisateur accède à la page donnée).
J’ai sélectionné « Tous les utilisateurs ». Ensuite, je génère le jeton.
Ensuite, dans mon tableau de bord personnalisé CSS/HTML sous , j’ai saisi le suivant entre les balises pertinentes :
var groupName = [NOM DU GROUPE PERTINENT]
var token = [JETON QUE J'AI GÉNÉRÉ]
$.ajax({
url: 'https://myforum.com/groups/groupName.json',
contentType: "application/json",
headers: {
"Api-Key": token,
"Api-Username": "system"
},
dataType: 'json',
success: function(result){
console.log('result = ' + result);
}
})
Le code s’exécute, mais renvoie une erreur indiquant « non autorisé » (même si je suis administrateur et membre du groupe que j’utilise pour mes tests).
Cela ne va-t-il pas exposer votre clé API « Tous les utilisateurs » à tous ceux qui peuvent consulter votre site ? Je pense que vous devrez trouver une autre approche pour récupérer les données de groupe depuis un composant de thème.
Si les informations de groupe dont vous avez besoin ne figurent pas dans le chargement JSON accessible à l’utilisateur, vous devez déterminer comment les ajouter au sérialiseur. Rechercher « ajouter au sérialiseur » ou peut-être addToSerializer ou add_to_serializer dans les composants de thème et les plugins existants pourrait vous aider.
Mais le code ne devrait-il pas fonctionner dans tous les cas ? L’API permet de récupérer des informations sur un groupe. Je reste toujours confus quant au fonctionnement de ce mécanisme, je suppose.
Quelle serait la méthode normale pour utiliser l’API afin d’obtenir des informations sur un groupe spécifique ?
L’information clé que je recherche est de savoir si l’utilisateur est propriétaire du groupe ou non. Cette information est renvoyée par l’API JSON. Ainsi, lorsqu’un utilisateur accède à une page spécifique, je souhaite envoyer une requête à l’API pour obtenir des informations sur le groupe, qui incluent, dans la réponse de base, le fait que l’utilisateur connecté au client est propriétaire.
Cela semble être une implémentation directe de l’API. Cependant, il semble que cette opération nécessite une clé API, mais la méthode que j’ai utilisée jusqu’à présent ne fonctionne pas.
Je ne pense pas qu’il soit nécessaire de créer un plug-in ou un composant de thème séparé, car cette opération fait partie des fonctions de base fournies par l’API JSON.
Je me demande s’il existe un moyen d’utiliser l’API avec une clé sans l’exposer (c’est-à-dire quelle serait la méthode standard ou la meilleure pratique pour utiliser l’API).
MODIFICATION : Si, pour une raison quelconque, cela n’est pas approprié pour l’appel API, alors oui, il faudrait le sérialiser. Quelqu’un a-t-il du code fonctionnel pour cela ? Je sais qu’il existe une méthode add_to_serializer, mais je n’ai pas réussi à faire fonctionner la syntaxe correctement et j’ai eu du mal à trouver des exemples fonctionnels de méthode.
Oui, j’ai fait une vérification rapide pour vous (à titre de référence) et je me suis connecté à un forum de test en tant que membre du personnel, puis j’ai récupéré le groupe staff, et j’ai obtenu les résultats attendus :
Objet JSON pour le groupe staff par un membre du personnel
@neounix : Merci beaucoup pour votre réponse. Cela a mis fin à ma chasse aux oies sauvages. Je pensais que la raison pour laquelle je recevais une réponse non autorisée était due à un problème d’authentification.
Il s’avère que vous avez raison : aucune clé API n’est requise pour cette action. En réalité, il s’agissait d’une erreur de code (simple), ce qui est évident dans le code que j’ai publié ci-dessus, mais que j’avais manqué auparavant (je mettais incorrectement la variable pour l’URL AJAX).
Voici le code fonctionnel :
var groupName = [NOM DU GROUPE PERTINENT]
var token = [Jeton que j'ai généré]
$.ajax({
url: 'https://myforum.com/groups/' + groupName + '.json', //c'est là que se trouvait l'ancienne erreur
contentType: "application/json",
dataType: 'json',
success: function(result){
console.log('réponse complète = ' + JSON.stringify(result));
console.log('est propriétaire du groupe = ' + result.group.is_group_owner); //notez que cela sera soit true, soit null
}
})
Je recevais auparavant une réponse non autorisée, car l’URL précédente que j’entrais contenait un nom de groupe incorrect (il était lu comme “groupName”).