reCaptcha 问题:请求的资源上不存在“Access-Control-Allow-Origin”标头,即使我在 angularJS 中添加标头,也始终显示

2024-01-08

我在 google reCaptcha 中遇到一些问题 验证码很好,显示正常,但是当我提交它时,当我向以下地址发送 POST 请求时出现连接问题

https://www.google.com/recaptcha/api/verify https://www.google.com/recaptcha/api/verify

这里是错误日志:

XMLHttpRequest cannot load https://www.google.com/recaptcha/api/verify. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3002' is therefore not allowed access. The response had HTTP status code 405.

这是我的html代码:

<div class="form-group" style="margin-bottom: 20px;">
    <div class="text-center center-block">
      <div class="text-center center-block" vc-recaptcha
      tabindex="3"
      theme="white"
      key="model.key"
      lang="en"
           </div>
    <button class="btn" ng-click="submit()">Submit</button>
  </div>
</div>

这是我的controller.js

 $scope.model = {
            key: //THIS IS MY PUBLIC KEY
        };
 $scope.submit = function() {

            var valid;
            var ip;
            $http.jsonp('http://ipinfo.io/?callback=JSON_CALLBACK')
                    .success(function(data) {
                        console.log("stateChangeStart ip = " + data.ip);
                        ip = data.ip;
                    }).then(function() {
                $http({
                    method: 'POST',
                    headers: {
                        'Access-Control-Allow-Origin': '*',
                        'Access-Control-Allow-Methods': 'POST'
                    },
                    url: 'https://www.google.com/recaptcha/api/verify',
                    data: {
                        'privatekey': /* THIS IS MY PRIVATE KEY */,
                        'remoteip': ip,
                        'challenge': vcRecaptchaService.data().challenge,
                        'response': vcRecaptchaService.data().response
                    }

                }).success(function(result, status) {
                    console.log('it work');

                }).error(function(data, status, headers, config) {
                    console.log('error');

                });

            });
        };

我在那里添加了标题,但它总是说

请求中不存在“Access-Control-Allow-Origin”标头 资源

有人可以帮助我吗? 谢谢

Update:

我正在使用 chrome,并且我已使用此插件在 Chrome 中启用了 CORS:

在chrome中启用CORS https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related

现在它给了我另一个错误:

XMLHttpRequest cannot load https://www.google.com/recaptcha/api/verify. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3002' is therefore not allowed access. 

我将我的controller.js更改为:

 $scope.model = {
            key: //THIS IS MY PUBLIC KEY
        };
 $scope.submit = function() {

            var valid;
            var ip;
            $http.jsonp('http://ipinfo.io/?callback=JSON_CALLBACK')
                    .success(function(data) {
                        console.log("stateChangeStart ip = " + data.ip);
                        ip = data.ip;
                    }).then(function() {
                $http({
                    method: 'POST',
                    headers: {
                        'Access-Control-Allow-Origin': 'http://localhost:3002',
                        'Access-Control-Allow-Methods': 'POST, GET, OPTIONS'
                    },
                    url: 'https://www.google.com/recaptcha/api/verify',
                    data: {
                        'privatekey': /* THIS IS MY PRIVATE KEY */,
                        'remoteip': ip,
                        'challenge': vcRecaptchaService.data().challenge,
                        'response': vcRecaptchaService.data().response
                    }

                }).success(function(result, status) {
                    console.log('it work');

                }).error(function(data, status, headers, config) {
                    console.log('error');

                });

            });
        };

但总是显示该错误,请帮助我。


很多这样的东西确实令人困惑。我们看到像上面这样的评论说“不要从客户端验证”。但是,如果您像我一样,您只是想让它在开发中首先工作,而我此时并不真正关心安全性。但是,我没有意识到 Chrome 比网络服务器更严格!如果不先做两件事,Chrome 将不允许您执行验证 Google 响应的步骤:

  1. 安装 CORS chrome 插件
  2. add this.headers.append('Content-Type', 'application/x-www-form-urlencoded');在发送帖子之前添加到标题。 (至少在角度2中)

显然,之后你不能指望所有用户都安装 Chrome CORS 扩展,而且你不想将你的秘密存储在客户端中,这真的很糟糕。因此,在开发中使用它后,您需要设置一个小型网络服务器,该服务器将接受来自客户端的请求并将其转发给 Google,然后将响应发送回您的客户端。

附:其他让我困惑的是人们说要添加this.headers.append('Access-Control-Allow-Origin', '*');但这是您在设置网络服务器时应用的设置,这与执行来自客户端的请求无关。我一直尝试将其应用于我的客户端角度 http 请求,认为这将是最终的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

reCaptcha 问题:请求的资源上不存在“Access-Control-Allow-Origin”标头,即使我在 angularJS 中添加标头,也始终显示 的相关文章

  • 如何在 {{}} AngularJS 中使用 JavaScript

    我知道 可以解释表达式 但是当我尝试在其中使用 javascript 时 它的工作方式并不像 a b c d split filter function n return n reverse 0 我需要使用它从 url 获取 slug 值
  • 安装 ngAnimate 模块不起作用

    我似乎无法让 ng animate 在现有的 1 2 应用程序中工作 我已遵循 API 中的检查列表 但它没有应用适当的动画类 我觉得我在安装过程中一定错过了一些愚蠢的事情 这是我所做的 1 我正在此处的文档头部加载 Angular 和 A
  • Angular Bootstrap $modal 如何动画化?

    我没有使用任何引导样式 我正在完全定制一切 制作动画相当简单 因为 modal uses fade in 我能够覆盖这些样式并且效果很好 但是模态是如何动画出来的呢 我没有看到任何类别被应用或删除 它会立即从 DOM 中删除 我怎样才能定制
  • 如果没有其他函数链接到承诺,则默认行为

    我想打开一个 确认您要取消对话框 如果没有链接其他功能 则默认导航回页面 window history back 如果我传递回调 我可能会这样做 function openCancelModal form callback if form
  • 如何使用复选框在 angularJS 中过滤多个值(或运算)

    如何使用Checkbox在angularJS中过滤多个值 OR运算 ul li movie name li ul
  • 如何在 AngularJs 中的指令内修改范围

    我需要从指令内的回调中修改根范围属性 但该指令位于由 switch 指令创建的内部作用域中 HTML div p Selected selected p div div p Item selected p div div div
  • 在 ASP .NET Core 2.1 Web Api 中启用 CORS

    我正在使用 ASP NET Core 2 1 Web API 和 React 编写应用程序 我的服务器位于 localhost 5000 上 客户端位于 localhost 3000 上 我想用 axios 发送 post 请求 但在浏览器
  • angularjs 自定义过滤器检查数据数组内的值

    我有两个过滤器 它们根据数据中的队列键过滤数据 这是我的代码 var app angular module app app controller mainController function scope Data object scope
  • 尝试使用 angularJS 和 c# webapi 从服务器下载文件

    将文件上传到服务器时效果很好 没有损坏的文件 但是 当我下载文件时 除了纯txt 它们起作用 它们的规模不断扩大并变得腐败 经过大量调查后 我不知道可能出了什么问题 我只是写文件 作为响应流并下载 blob 欢迎任何想法 严重依赖此线程来解
  • (angularjs-google-maps) ng-click 内部标记

    这个问题是关于angularjs google maps https github com allenhwkim angularjs google maps https github com allenhwkim angularjs goo
  • 错误:[ngModel:datefmt] 预期 `2015-05-29T19:06:16.693209Z` 为日期 - Angular

    我正在尝试angular申请与Django with rest framework 该应用程序从服务器接收 json 信息 关键之一是created time 该字段的值的格式根据iso 8601 例如2015 05 29T19 06 16
  • 以编程方式更改模型时,AngularJS 自定义验证不会触发

    我创建了一个自定义验证器 要求日期必须是过去的日期 当手动在字段中输入日期时 验证似乎效果很好 但是 如果我以编程方式输入更改日期 直接更改模型而不是在字段中键入 则验证不会触发 我相信我正在按照文档中的指示执行自定义验证指令 这是一个js
  • 在带有融合图表的饼图中显示图例

    我想在饼图中显示图例及其值 我用谷歌搜索了很多 但没有得到任何解决方案 此外 融合图表中没有选项可以直接实现这一点 谁能建议我可以应用什么技巧来做到这一点 我想我需要修改库中的很多我不想要的东西 所以请帮助我 Refer below ima
  • 粘性页脚不粘在 AngularJS 中

    Im working an angular site and im trying to implement a sticky footer across all views but the footer stops sticking whe
  • 单击元素外部时触发事件的指令

    我知道有很多问题都在问类似的事情 但没有人真正解决我的问题 我正在尝试构建一个指令 当鼠标单击当前元素外部时 该指令将执行表达式 为什么我需要这个功能 我正在构建一个应用程序 在这个应用程序中 有 3 个下拉菜单 5 个下拉列表 如选择的
  • 如何更改 AngularJS HTTP 调用的基本 URL?

    我的应用程序多次调用 HTTP 如下所示 this http method this method url this url this url 始终设置为 app getdata 之类的内容 现在我已将应用程序的后端移至另一台服务器 我将需
  • AngularJS 服务返回未定义

    我有以下服务 app services emailService http sce function http sce return getMessage function messageId callback http get api e
  • 从动态 JSON 数据级联父子选择框

    我已经从服务器接收到的 JSON 数据动态创建了一些链接选择框 链接 级联的工作方式是每个选择框都是具有以下属性的命名对象 父属性 作为该选择框对象的父对象的名称 选项 选项对象数组 其中每个对象包含 a 选项值 b 父选项值 当前值映射到
  • 拖放以在 angularjs 中排列表格行顺序

    我正在使用 angularjs 并有一个简单的表格 我使用下面的代码 table tr th Name th th Phone th tr tr td friendObj name td td friendObj phone td tr t
  • 使用 Jasmine 测试 Angular 异步服务

    我正在尝试使用 Jasmine 测试真正的 http 调用 集成测试 但是当我调用使用 http get 的方法时 它会超时并且服务器永远不会被调用 我知道我应该注入 http 的实现 但不确定应该在哪里发生 搜索服务 app servic

随机推荐