7 recaptcha recaptcha-v3 grecaptcha
这实际上与recaptcha v3 前端返回奇怪的、空洞的(无效?)结果相同)]}'
在 recaptcha 设置页面上 - https://www.google.com/recaptcha/admin/site/.../settings我有
我可以看到上一个 stackoverflow 问题和我现在的案例之间的唯一区别是:
在上一个问题中,海报显然改变了动作名称,一切都很好。我已经摆弄了动作名称,但它没有改变任何东西。我将在下面显示响应详细信息。在我这样做之前,这里是我页面中相关代码的摘录:
<script src="https://www.google.com/recaptcha/api.js?render=MYKEY"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('MYKEY', {action: 'contactpage'});
});
<script>
Run Code Online (Sandbox Code Playgroud)
这是我运行它时发生的情况。结果在 Chrome 和 Firefox 中相同。在浏览器控制台中,我看到以下响应:
XHR POST https://www.google.com/recaptcha/api2/reload?k=*MYKEY*
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Response Payload
)]}'
["rresp"," ... (and much more)... ]
Run Code Online (Sandbox Code Playgroud)
脚本标签中的recaptcha api url 与控制台中显示的url 明显不同,这对我来说很好。显然,很多事情都在幕后进行。
小智 0
实际上,)]}' ["rresp"的事情很正常。我不知道为什么,但这就是浏览器(Firefox 和 Chrome)的开发人员工具显示来自 google recaptcha 获取令牌服务的原始响应的方式。
但这不是问题。完整的JS代码:
// call the recaptcha service to get a token
grecaptcha.ready(function() {
grecaptcha.execute('SITE_KEY', {action:'action_name'})
.then(function(token)
{
console.log(token);
});
});
Run Code Online (Sandbox Code Playgroud)
将正确返回TOKEN(这只是rresp之后的字符串部分,意思是[“rresp”,“THIS_STRING”,....])。现在,您可以将此令牌添加到表单中的隐藏字段,并在提交后在服务器端验证它(为了验证令牌并获取成功/失败以及人类/机器人分数从 0 到 1 的实际响应,您需要在服务器端调用来自谷歌的另一个 recaptcha 服务,如下所示: https: //gist.github.com/josephilipraja/3ec08844e9b3ec5acb9f044e3c4ec387)
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |