No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' localhost:8080'因此不允许访问

时间:2014-08-05 21:37:33

标签: node.js angularjs passport-twitter

我已经多次在论坛上发布过这个问题,但是使用这些解决方案并没有帮助。

我正在使用PassportJS构建MEAN堆栈应用程序以允许使用Twitter登录。

angular.module('HomeCtrl', []).controller('HomeController', function($scope,$http) {

$scope.tagline = 'To the moon and back!';   
$scope.twit = function() {
    console.log("twitter button clicked");
    $http.get("/auth/twitter")
    .success(function (data) {
        console.log(data);
    })
    //$window.location.href = '/auth/twitter';
}});

我的服务器中的route.js有

app.get('/auth/twitter', passport.authenticate('twitter', { scope : 'email' }));

现在当Twitter重定向到应用程序时,由于CORS问题,服务器重定向无法正常工作,我能够理解。解决这个问题

我试过以下

app.all('/*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:8080");
   res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
  next();
});

但仍然无效。在web上阅读更多内容后,我的理解是twitter不会发送头文件来源,因为它是一个重定向,所以node.js服务器无法控制它收到的可以发送回浏览器的响应。

在这个阶段,我不知道该怎么办。请指教

根据评论:这是twitter回调的回复

Request URL:https://api.twitter.com/oauth/authenticate?oauth_token=l8OKcAvqr3QLrlCroweGgByvvhXfSmIiqhvRgGqML6c
Request Headers
Provisional headers are shown
Accept:application/json, text/plain, */*
Origin:http://localhost:8080
Referer:http://localhost:8080/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Query String Parametersview sourceview URL encoded
oauth_token:l8OKcAvqr3QLrlCroweGgByvvhXfSmIiqhvRgGqML6c

1 个答案:

答案 0 :(得分:-1)

这里的问题是twitter没有设置CORS头(不是你自己的节点服务器)。你无法解决这个问题。 因此,您可以使用简单的墨水<a href="/auth/twitter"></a>代替$ http.get或$window.location.href。 请注意,在这种情况下您不会应用您的http拦截器,因此您可能需要传递一些查询参数。