recaptcha - recaptcha v3 前端 .execute() 返回奇怪的结果 )]}' ["rresp","..."]
问题描述
这实际上与recaptcha v3 前端返回奇怪的、空洞的(无效的?)结果与 )]}'相同
在 recaptcha 设置页面上 - https://www.google.com/recaptcha/admin/site/.../settings我有
- 选择recaptcha v3
- 设置域等
- 生成的密钥
我现在可以看到上一个 stackoverflow 问题和我的案例之间的唯一区别是:
- 我没有使用本地主机,
- 我的动作已经是所有字母字符,并且
- 我仍然收到奇怪的反应
在上一个问题中,显然海报更改了动作名称,一切都很好。我摆弄了动作名称,它没有改变任何东西。我将在下面显示响应详细信息。在我这样做之前,这是我页面中相关代码的摘录:
<script src="https://www.google.com/recaptcha/api.js?render=MYKEY"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('MYKEY', {action: 'contactpage'});
});
<script>
这是我运行它时发生的情况。在 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)... ]
script 标签中的 recaptcha api url 与控制台中显示的 url 明显不同,这对我来说很好。显然,很多事情都在幕后发生。
解决方案
实际上,)]}' ["rresp"的事情是正常的。我不知道为什么,但这就是浏览器(Firefox 和 Chrome)的开发者工具如何显示来自 google recaptcha get token service 的原始响应。
但这不是问题。完整的 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);
});
});
将正确返回 TOKEN(这只是 rresp 之后的字符串部分,意思是 ["rresp","THIS_STRING",....])。现在您可以将此令牌添加到表单中的隐藏字段,并在提交后在服务器端验证它(为了验证令牌并获得成功/失败和人/机器人分数从 0 到 1 的实际响应,您需要在服务器端从谷歌调用另一个 recaptcha 服务,如下所示:https ://gist.github.com/josephilipraja/3ec08844e9b3ec5acb9f044e3c4ec387 )
推荐阅读
- python - 合并数据框中每一行的列
- swiftui - 带有绑定的视图导致 AnchorPreference 在 SwiftUI 中返回 nil
- windows - 如何在 Windows WSL Ubuntu 上安装 Homebrew,并修复“zsh: brew command not found”错误
- react-native - React-Native fetch() 和请求最终出现网络错误
- qt - 如何自定义 QDialogButtonBox 按钮的背景颜色?
- python - Bert 标记化错误 ValueError:输入 nan 无效。应该是字符串、字符串列表/元组或整数列表/元组
- html - 如何将 flexbox 添加到 ngb-toast 的内容中
- ant - 如何在 Ant 脚本中创建 Javadoc 自定义标签
- laravel - 更改 Laravel 8 凭证匹配验证的错误键?
- mongodb - Mongoose 好友请求模型聚合