此问题已经在这里有了答案:
我在登录页面上实现了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.
由于重复的问题,该问题已被关闭。但是帖子的答案并不能解决我的问题。 我终于发现使用代理可以解决问题。@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发送请求来获取分数,如下所示。
使用代理配置
添加标题