Angular / Node / Express / Passport – Problèmes de connexion à Facebook (CORS)

J’essaie d’utiliser l’authentification Facebook sur mon serveur NodeJs. Je suis arrivé au tutoriel de http://scotch.io/ et je l’ai fait fonctionner localement lors de l’utilisation d’un client REST (Postman, etc.).

Pour améliorer l’interface utilisateur, j’ai utilisé Angular JS comme front-end. mais lorsque j’appelle un http.get sur mon itinéraire spécifique indiqué sur le back-end de NodeJs, l’erreur suivante apparaît dans chome et firefox:

XMLHttpRequest ne peut pas charger https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%… 0% 2Fapi% 2Fautbook% 2Fcallback & scope = email & client_id = 3000000000006. Aucun en-tête ‘Access-Control-Allow-Origin’ n’est présent sur la ressource demandée. L’origine ‘localhost: 8080’ n’est donc pas autorisée.

J’ai essayé plusieurs solutions sur StackOverflow mais cela ne fonctionne toujours pas … mes NodeJs utilisent Express 4. * et un middleware CORS. pour Angular, j’ai trouvé plusieurs façons d’activer CORS, aucune n’ayant fonctionné jusqu’à présent.

J’espère que vous pourrez m’aider: D Merci d’avance!

Vous pouvez utiliser 'window.location="http://localhost:3000/auth/facebook"'; dans votre contrôleur angular à partir duquel vous envoyez la demande à votre serveur Express qui contient passport.authenticate éléments passport.authenticate .

Cela empêchera votre angular d’appeler la page de dialog d’authentification de facebook en tant que demande AJAX.

Ça marche pour moi!

J’utilise également Angular avec Node / Express, et la fonction suivante fonctionne pour moi avec mes propres services backend (pour l’instant, je ne l’utilise pas avec Facebook), alors jetez-y un œil

 var allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Access-Control-Allow-Origin'); res.header("Access-Control-Max-Age", "86400"); // 24 hours // intercept OPTIONS method if ('OPTIONS' == req.method) { res.send(200); } else { next(); } }; 

Ensuite, vous devez l’utiliser comme suit dans la méthode app.confiure() :

 // configure Express app.configure(function() { app.use(allowCrossDomain); ... }); 

Il est important de l’utiliser AVANT toutes les autres commandes!