我看到了Google文档,但没有找到有关重新加载reCaptcha v3的信息。 https://developers.google.com/recaptcha/docs/v3
我该怎么做?
答案 0 :(得分:1)
reCaptcha V3在一个不可见的验证码中,它自动检测用户的行为并对其进行评分,无需重新加载或用户直接与其他任何人互动用户界面。
reCAPTCHA v3返回每个请求的得分,没有用户负担。 得分基于与您的网站的互动,使您能够 对您的网站采取适当的措施。
reCAPTCHA v2重置
grecaptcha.reset();
reCAPTCHA v3重置
调用在页面上呈现的grecaptch.execute()函数,将根据外观重置值。 (Google Recaptcha V3 - Widget Id when loading captcha through URL)
grecaptcha.execute('[Your recaptcha ID]', {
action: 'general_form_contact_us'
}).
then(function(token) {
document.querySelector('.g-recaptcha-response-v3-contact_us').value = token;
});
注意,您将需要相应地调整所有值。
您可以通过复制并粘贴到chrome控制台中进行测试。按Enter后,它会更改隐藏字段的值。
答案 1 :(得分:1)
确保您随后每次回发或致电Google时都要刷新令牌。
在我的情况下,我使用 reCAPTCHAv3 将令牌保存到ASP.NET HiddenField服务器控件中,以便在后端进行发现。但是,由于我的javascript代码错误,此控件在后续的回发中没有使用新的令牌进行更新(如果HiddenField不为空(不是在回发中),则仅刷新令牌)。通过比较Google返回的JSON结果并在第二个响应中发现错误代码“ timeout-or-duplicate”,发现了我的错误。
解决方案是在调用Google之前清除JavaScript中的HiddenField值。希望这可以帮助其他遇到同样问题的人。
//Need to do this before each call to reCAPTCHA to get fresh token.
function resetReCAPTCHAv3() {
$('#HiddenFieldreCAPTCHAv3ResponseMP').val('');
}