javascript - 如何在odoo中实现recaptcha

标签 javascript python html forms recaptcha

我们正在为企业使用 odoo 12 Online。 我们希望使用 google recapcha 来保护我们的表单。

我们如何实现谷歌验证码?如果可能的话,提供如何实现它的完整示例。

我们更喜欢 recaptcha v3,但如果不可能的话,v2 实现也可以。

当我尝试在线搜索 google recaptcha 的实现时,几乎每次都会包含 .php 文件。我们的页面加载了 QWeb View 类型,但不支持 php。

不用php可以实现吗?我们绝对可以使用 html 和 javascript,也可能使用 python,是否可以只使用这些?如果可能的话,我们希望仅使用 javascript 和 html 来完成此操作,但我假设情况并非如此。

我们是否可以仅使用 html 和 javascript 实现任何其他表单保护?

最佳答案

Python 中的 Google reCAPTCHA v3

您需要在前端安装reCAPTCHA并在后端实现验证。在帖子的底部,我链接了官方 Google reCAPTCHA 文档。

前端集成

<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
<script>
grecaptcha.ready(function() {
    grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token) {
       ...
    });
});
</script>

前端只需要:

  1. 使用您的站点 key 加载 JavaScript API
  2. 在执行操作或页面加载时调用 grecaptcha.execute
  3. 将 token 与验证请求一起发送到您的后端

后端集成

token 的验证与 reCAPTCHA v2 中的相同。当用户在您的网站上提交表单时,您会收到 POST 参数 g-recaptcha-response。您需要使用以下参数向 Google reCAPTCHA 服务发出 POST 请求。您可以选择自己的 HTTP 请求框架。

POST Parameter  Description
secret          Required. The shared key between your site and reCAPTCHA.
response        Required. The user response token provided by the reCAPTCHA client-side integration on your site.
remoteip        Optional. The user's IP address.

然后您会从服务获得 JSON 响应,如果请求失败,您可以在后端处理进一步的操作。

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

来源

关于javascript - 如何在odoo中实现recaptcha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57271019/

相关文章:

javascript - js 区分正则表达式捕获组

javascript - 基于参数的单例模式在 JavaScript 中创建 Promise

python 确定循环中的字符串格式错误

javascript - jquery弹出窗口仅拉动最后一个弹出div

javascript - Android 7.0 及以上版本 Javascript 无法正常工作 Webview

javascript - 动态添加元素并尝试使用选择器 .click 事件 jQuery

python - django 可以延迟加载模型中的字段吗?

python - 为 Python 3.x 安装 Pip

javascript - 如何让 child 跨度与 parent 崩溃

javascript - KineticJS:如何获取 Sprite 或图像的宽度和高度?