Google reCaptcha响应405错误,并且CORS消息[重复]

问题描述 投票:0回答:1

我在登录页面上实现了Google reCaptchaV3我想通过向https://www.google.com/recaptcha/api/siteverify发送请求来获得分数我的代码发送发送请求,如下所示:

var x = this.http.post<RecaptchaResponse>(`https://www.google.com/recaptcha/api/siteverify?secret=${this.secret}&response=${this.token}`, null)
  .pipe(
    map(data => new RecaptchaResponse().deserialize(data)),
        catchError(() => throwError('No Score')),
);

但是我得到了错误

Access to XMLHttpRequest at 'https://www.google.com/recaptcha/api/siteverify?secret=SECRET&response=TOKEN' from origin 'http://localhost:50000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我确实尝试了以下方法:1)在管理控制台上添加“ localhost”2)在管理控制台上添加127.0.0.13)禁用“验证reCAPTCHA解决方案的来源”选项

但是以上都不起作用。关于如何在本地主机中测试reCaptcha的任何想法吗?因为它在Postman上工作,但在localhost上却没有。

UPDATE

我已将标头添加到请求中,但遇到另一个错误
let headers: HttpHeaders = new HttpHeaders();
    headers = headers.append('Access-Control-Allow-Origin', 'http://localhost:50000');
    headers = headers.append('Access-Control-Allow-Methods', 'POST');
    headers = headers.append('Access-Control-Allow-Headers', 'access-control-allow-headers,access-control-allow-methods,access-control-allow-origin');
var x = this.http.post<RecaptchaResponse>(`https://www.google.com/recaptcha/api/siteverify?secret=${this.secret}&response=${this.token}`, null, {headers: headers})
      .pipe(
        map(data => new RecaptchaResponse().deserialize(data)),
            catchError(() => throwError('No Score')),
    );

在飞行前请求时出现错误

Access to XMLHttpRequest at 'https://google.com/recaptcha/api/siteverify?secret=SECRET&response=TOKEN' from origin 'http://localhost:50000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

enter image description here更新的V2 =>解决方案

由于重复的问题,该问题已被关闭。但是帖子的答案并不能解决我的问题。

我终于发现使用代理可以解决问题。@dasunse的答案几乎可以解决问题。1)使用以下配置添加proxy.cong.json

"/api": {
  "target": "https://www.google.com",
  "secure": false,
  "pathRewrite": {
      "^/api": ""
  },
  "logLevel": "debug",
  "changeOrigin": true //This is a must if origin from localhost to other domain
}

2)修改package.json以创建代理

"scripts": {
    "ng": "ng",
    "start": "ng serve --proxy-config proxy.conf.json"
  },

3)向网址提出请求

var x = this.http.post<RecaptchaResponse>(`/api/recaptcha/api/siteverify?secret=${this.secret}&response=${this.token}`, null)
  .pipe(
    map(data => new RecaptchaResponse().deserialize(data)),
        catchError(() => throwError('No Score')),
);

我已经在我的登录页面上实现了Google reCaptchaV3,我想通过向https://www.google.com/recaptcha/api/siteverify发送请求来获取分数,如下所示。

angular cors localhost recaptcha
1个回答
0
投票

使用代理配置

添加标题

© www.soinside.com 2019 - 2024. All rights reserved.