使用 ReCaptcha 验证时如何解决浏览器错误?

Chi*_*que 12 recaptcha recaptcha-v3

从某个时候起,我在 Web 应用程序(Node 后端、HTML / JS 前端)上进行 ReCaptcha 验证期间收到错误代码浏览器错误。

此线程此处解释了这是由于未在 ReCaptcha Enterprise 白名单中添加域而导致的错误。但是,我没有使用 ReCaptcha Enterprise。我只使用 ReCaptcha v3。并且在文档中没有提及错误代码。

我已在 ReCaptcha 控制台中正确添加了我的域名。

还有另一个线程,用户发现它主要发生在 Safari 中。但是,没有提供任何解决方案。

我认为简单地忽略后端的这个错误并不是正确的解决方案。

为什么会出现“浏览器错误”错误?解决这个问题的正确步骤是什么?

mam*_*don 6

我发现了一个潜在原因:用户浏览器中与 ReCaptcha 的连接失败。

\n

我使用 Chrome 中的“网络请求阻止”功能验证了这一点。当连接被阻止时,recaptcha.execute()返回一个令牌,但该令牌是BROWSER_ERROR在后端验证时生成的。我想超时或其他网络问题也会以类似的方式失败。

\n

至于如何处理\xe2\x80\xa6\n理想情况下,前端能够检测到这种情况,只需execute()再次调用即可重试。不幸的是,在前端很难区分成功和失败。您可能会考虑使用错误回调:

\n
grecaptcha.enterprise.execute(siteKey).then(\n  token => console.log(\'OK\', token),\n  err => console.log(\'fail\', err)\n);\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 但这并没有帮助,因为成功和失败都会调用相同的“OK”回调。我确实注意到了token.length不同之处:成功得分约为 1720 字节,错误约为 490 字节。但依赖此属性可能不安全。

\n

因此,您似乎需要将令牌传递到后端服务,并在那里进行验证,然后您才能知道前端是否需要重试。

\n

(全面披露:我正在使用 ReCaptcha Enterprise)

\n

  • 非常好的解释和思考过程。尽管这是一个“手动黑客”,因为基于这些假设的任何内容在未来的更新中可能都不成立,因为这些假设没有记录下来,但这些仍然是非常好的假设,并且可以以有意义的方式使用。分享网络阻止导致此问题的奖励积分,这可以在前端轻松检测到,并且也许可以使用它来显示客户端中的某种错误,或其他一些解决方法。但仍在寻找解决方法。 (2认同)