Angular / Node / Express / Passport – 连接到facebook(CORS)时的问题

我试图在我的NodeJs服务器上使用Facebook身份validation。 我来到http://scotch.io/的教程,并使用REST客户端(邮递员等)在本地工作。

为了改善UI,我使用了Angular JS作为前端。 但是当我调用一个http.get到我在NodeJs后台给出的特定路由时,我在chome和firefox中得到了以下错误:

XMLHttpRequest无法加载https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http% … 0%2Fapi%2Fauth%2Ffacebook%2Fcallback&scope = email&client_id = 3000000000006。 请求的资源上没有“Access-Control-Allow-Origin”标题。 因此不允许访问原产地“localhost:8080”。

我已经尝试了几个解决scheme在StackOverflow,但它仍然无法正常工作…我的NodeJs使用Express 4. *和一个CORS中间件。 对于Angular,我发现了几种启用CORS的方法,目前为止还没有任何工作。

我希望你能帮助我:D在此先感谢!

你可以使用'window.location="http://localhost:3000/auth/facebook"'; 在您的angular度控制器从您发送请求到您的快递服务器 ,其中包含passport.authenticate东西。

这将停止您的angular度调用Facebook的身份validation对话页作为AJAX请求。

这个对我有用!

我正在使用Angular和Node / Express,下面的函数适用于我自己的后端服务(我目前没有和Facebook一起使用它),所以请检查一下:

 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(); } }; 

然后,你需要使用app.confiure()方法,如下所示:

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

在所有其他directrives之前使用它是重要的!