Flux OAuth 2 pour imgur dans le plugin Discourse

Bonjour,

Je développe un plugin très spécifique pour notre instance Discourse et j’ai quelques questions.

À un moment donné, le plugin devra envoyer une collection d’images de sujets Discourse vers Imgur. La partie qui rassemble ces images est déjà terminée.

Je tente maintenant de m’authentifier auprès de l’API Imgur en utilisant leur flux OAuth2. J’ai déjà créé une interface d’administration pour le plugin qui permet de cliquer sur un bouton pour autoriser le plugin sur votre compte Imgur. Une fois l’utilisateur connecté, une URL de rappel (configurée comme mon instance Discourse avec une route spécifique que j’ai créée dans le plugin) est appelée avec le jeton d’accès (voir l’exemple).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

Ma question est : comment puis-je récupérer ce jeton ? Je ne sais pas par où commencer.

Ma compréhension est que, puisque le jeton est renvoyé dans un paramètre de hachage, cela doit être fait côté JavaScript. J’ai essayé de configurer un contrôleur et une route pour mon URL de rappel, mais je n’arrive pas à comprendre comment lire l’URL (et en particulier la partie hachage) depuis là. (Je n’ai rien trouvé d’utile dans la documentation Ember.js ou sur Stackoverflow). J’ai essayé de configurer différents écouteurs d’événements, mais ils ne semblent jamais se déclencher.

Ma deuxième question est : où devrais-je stocker le jeton et le jeton d’actualisation ? Puis-je les enregistrer comme paramètre système depuis le plugin ? J’ai entendu parler du PluginStore, mais il n’est accessible qu’en Ruby (ce qui signifierait créer un point de terminaison pour que le client envoie ces jetons au serveur). De plus, est-ce sécurisé d’un point de vue sécurité ?

Merci !

Édition : J’avais une faute de frappe dans le nom de mon fichier de route, il manquait un « s », c’est pourquoi rien ne se déclenchait…

Vous ne pourrez pas y parvenir via HTTP sur localhost. Il est recommandé d’avoir besoin d’aller de simuler HTTPS avec un outil comme https://ngrok.com/ ou d’exécuter votre serveur de développement dans le cloud en mode HTTPS avec un domaine.

Je pensais en avoir besoin aussi, mais je suis bien redirigé vers mon URL locale et je vois le token dans l’URL.

Oui, vous avez raison, le client peut utiliser HTTP. Le problème est que cela peut être intercepté et les jetons lus, ce qui rend l’utilisation d’OAuth2 inutile dans un premier temps :). Personnellement, je me sentirais aussi plus à l’aise en travaillant avec le protocole final complet en développement, afin de savoir que mon code fonctionne.

Oh oui, je suis tout à fait d’accord, pour l’instant c’est uniquement à des fins de développement. Bien sûr, en production, j’utiliserais https :slight_smile: