首页 > 解决方案 > 在同一页面上加载 Enterprise Recaptcha (invisble) 和 V2 Checkbox (non-enterprise) 会导致 V2 Checkbox 默认为 Enterprise

问题描述

我需要在同一页面上加载 V2 Checkbox(非企业)和 Enterprise reCaptcha。

表格 A 需要使用 V2(非企业)“我不是机器人”复选框。

Form B 需要使用 Enterprise invisible ReCaptcha。

表单 A 和表单 B 呈现在同一页面上。每个表单使用单独的 API 密钥(表单 A 使用非企业 API 密钥,表单 B 使用企业 API 密钥)。

在我的情况下,首先加载非企业 reCaptcha 脚本,然后加载企业脚本。但是,当我检查 Form AI am not a robot复选框(应该使用非企业功能)时,Form A 似乎使用 Enterprise reCaptcha。这是我看到的情况:

  1. 单击I am not a robot表格 A 上的复选框后,有时会显示视觉挑战验证(“选择所有带有出租车的图像”)块。据我了解,这是一项企业功能。我的表单应该使用 V2(非企业版),所以不知道为什么会出现这种情况?
  2. 单击I am not a robot表格 A 上的复选框后,网络选项卡会显示一个网络呼叫,userVerify被成功调用到以下路由:https://www.google.com/recaptcha/enterprise/userverify?k=GOOGLE_RECAPTCHA_V2_NON-ENTERPRISE_API_KEY。注意/enterprise? 此外,请注意所使用的 API 密钥是 NON-ENTERPRISE API 密钥。
  3. 当我检查I am not a robotChrome 控制台中的复选框时,我看到再次<iframe title="reCAPTCHA" src="https://www.google.com/recaptcha/enterprise/anchor?ar=....使用/enterprise(当它应该读取时/api2)。

我可以在前端确认窗口上的 grecaptcha 对象如下所示:

{
  enterprise: {ready: ƒ, render: ƒ, reset: ƒ, getResponse: ƒ, execute: ƒ}
  execute: ƒ ()
  getResponse: ƒ ()
  ready: ƒ (Q)
  render: ƒ ()
  reset: ƒ ()
}

当我们调用grecaptcha.render()Form A 的方法时,我们调用的是外部的 .render 方法(即非企业 reCaptcha 对象)。但是,为了能够grecaptcha.render()在 Enterprise 也加载时调用,我必须将它包装在grecaptcha.ready(). 如果页面上仅加载了 V2(非企业版),我不必执行此额外步骤。

如果我在 Enterprise 脚本之后强制加载 V2 非企业脚本,那么我看不到上述问题,并且似乎 FORM A 使用了正确的路由和版本。但是,这对我来说不是解决方案,因为我无法确定首先需要在我的应用程序上加载哪个脚本。

我的问题

我没有看到任何有关此文件的记录,甚至没有在任何地方询问过。如果有人能对正在发生的事情和可能发生的事情发表意见,我会很高兴。谢谢谢谢!

标签: recaptchagrecaptcha

解决方案


推荐阅读