Angular / Node / Express / Passport - 连接到facebook(CORS)时出现问题

时间:2014-05-20 07:52:43

标签: facebook node.js angularjs express cors

我试图在我的NodeJs服务器上使用facebook身份验证。我来到http://scotch.io/的教程,并在使用REST客户端(Postman等)时使其在本地工作。

为了改进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。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' localhost:8080'因此不允许访问。

我已经在StackOverflow上尝试了几种解决方案,但它仍然无效...... 我的NodeJ使用Express 4. *和CORS中间件。 对于Angular,我找到了几种启用CORS的方法,到目前为止还没有工作。

我希望你能帮助我:D提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在 Angular Controller 中使用passport.authenticate,将请求发送到包含const plotbandPath = plotband.svgElem.d.split(' ') plotbandPath[7] = plotbandPath[9] = newY plotband.svgElem.animate({ d: plotbandPath }, 300) 内容的 Express Server

这将停止你的角度调用facebook auth对话页面作为AJAX请求。

对我有用!

答案 1 :(得分:0)

我也正在使用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);
    ...
});

在所有其他目标之前使用它非常重要!