【问题标题】:No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost:8080' is therefore not allowed access请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'localhost:8080' 因此不允许访问
【发布时间】:2014-08-05 21:37:32
【问题描述】:

我在论坛上多次看到此问题,但解决这些问题并没有帮助。

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

但这仍然不起作用。在网上阅读更多内容后,我的理解是 twitter 不发送 header-origin ,并且由于它是一个重定向,所以 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

【问题讨论】:

  • 提供对您失败的特定请求的更多详细信息。转到您的浏览器并检查错误并检查请求以查看浏览器添加到您的请求中的 Origin 标头字段。回来提供这些细节,也许我们可以提供帮助。
  • 该请求不是针对您的服务器的。该请求是针对 twitter 服务器的。您是否在运行 API.twitter.com 的服务器中编写了 CORS 支持代码?因为否则这是没有意义的。您的 CORS 代码位于处理您的请求的服务器中,而不是位于为您的内容提供服务的服务器中。
  • 我也有类似的问题。有什么解决办法吗?

标签: node.js angularjs passport-twitter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 2018-08-12
    • 2017-09-04
    • 1970-01-01
    • 2019-02-04
    • 2017-02-04
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多