2017-06-14 1 views
0

Depuis l'affichage sur le forum disqus disqus semble être une perte de temps, peut-être quelqu'un ici peut vous aider. J'essaie d'utiliser le flux OAuth2 pour connecter un utilisateur Disqus au système de compte de mon application afin que je puisse surveiller leur activité (posts/comments/etc). J'utilise Meteor pour mon application. J'appelle le point de terminaison d'autorisation OAuth2 à partir de mon code serveur et je renvoie le code HTML résultant au client pour le rendu. Tout cela fonctionne très bien. Mais je vois 2 problèmes côté client. Tout d'abord, le code HTML retourné par Disqus semble être conçu sur une page entière et les champs nom d'utilisateur/mot de passe s'étendent sur toute la fenêtre. Je m'attendais à une fenêtre de dialogue/modale comme celle que Disqus fournit lors de la connexion à un forum. J'ai essayé d'encapsuler le code HTML à l'intérieur d'une fenêtre modale Boostrap3 qui fonctionne principalement à l'exception des champs nom d'utilisateur et mot de passe qui s'étendent du côté droit de la boîte de dialogue.Problèmes avec Disqus OAuth2 flux

En ignorant l'UI moche, le deuxième problème est que lorsque l'utilisateur clique sur le lien de soumission Disqus met en place et la page d'erreur intitulée «vérification CSRF a échoué (403) - DISQUS». Je devine que cela peut être parce que l'appel OAuth2 a été fait à partir du serveur et l'envoi vient du client. Si je copie l'URL OAUTH2 directement dans le navigateur, tout fonctionne correctement. Mais je ne veux pas exposer ma clé API et le code résultant du côté client, car cela semble être un risque pour la sécurité.

Tout ce que je veux vraiment faire est de vérifier que l'utilisateur essaie de connecter son propre compte à mon application (et pas à un autre utilisateur). Je ne poste pas avec leur compte, donc je n'ai pas besoin d'un jeton d'accès (j'appelle l'utilisateur/détails qui prend juste la clé API). J'ai donc pensé à créer un forum pour mon application et à utiliser le point de terminaison de connexion pour vérifier le combo nom d'utilisateur/mot de passe. Mais ce dialogue n'explique pas les champs que je demande.

J'ai également envisagé de créer ma propre boîte de dialogue pour demander le nom d'utilisateur/mot de passe, renvoyer ceux-ci au serveur et avoir le serveur "faux" le soumettre de nouveau à Disqus. Mais ce n'est pas une solution maintenable puisque Disqus peut changer les champs attendus à tout moment. Et c'est moche comme péché.

Quelqu'un a des suggestions? Je n'ai posté aucun code car je ne crois pas que ce soit un problème de codage (et le code est un peu compliqué). Mais si quelqu'un pense que cela vous aidera, je serai heureux de l'afficher. Et, oui, je suis conscient que ne pas poster le code viole les conventions StackOverflow. Mais je prends une chance que les pouvoirs en place permettent ce poste puisque le soutien de Disqus est inexistant et je ne sais pas où aller chercher.

Répondre

0

Le problème de base était que j'utilisais 'request' avec le transfert activé de sorte qu'au lieu d'obtenir l'URL Disqus, j'obtenais le texte d'authentification Disqus. Vous devez afficher l'URL d'authentification dans une fenêtre, pas le contenu. Cela résout le problème CSRF.

Le problème suivant est que l'URL renvoyée par getAuthorizationUrl est incorrecte. C'est de la forme 'nullhttps: ...'. Aucune idée d'où vient le 'nul', mais le dépouiller corrige ce problème.

Pour simplifier les choses pour tous ceux qui cherchent à le faire, il existe une nouvelle version brillante du NPM Disqus qui inclut des méthodes d'authentification OAuth au https://www.npmjs.com/package/disqus.