我在我的 Web 应用程序中使用 Google reCAPTCHA v3。我实现了一个函数“runCaptcha”,该函数利用“grecaptcha.execute”来获取令牌。但是,我注意到每次调用这个函数时
我在我的 Web 应用程序中使用 Google reCAPTCHA v3。我实现了一个函数“runCaptcha”,该函数利用“grecaptcha.execute”来获取令牌。但是,我注意到每次调用此函数时,接收新令牌所需的时间都会逐渐变长。我不确定为什么会发生这种情况以及如何解决它。
问题:
为什么在第一次请求后获取新令牌需要更长的时间,为什么这个更长的时间保持不变?我初始化 grecaptcha 或管理其实例的方式有问题吗?使用 grecaptcha.execute 是否存在已知的性能问题?任何帮助或指导都将不胜感激!提前谢谢您。
测量:我还进行了一些测量,获取令牌的响应时间似乎随着每次后续调用而增加。以下是观察到的时间的一些示例:
第一次测量:
第二次测量
export function runCaptcha(siteKey, captchaAction) {
return new Promise((resolve, reject) => {
if (typeof grecaptcha === 'undefined') {
reject('grecaptcha is not defined');
return;
}
grecaptcha.ready(function () {
grecaptcha.execute(siteKey, { action: captchaAction }).then(function (token) {
resolve(token);
}).catch(function (error) {
reject('Failed to execute reCAPTCHA: ' + error);
});
});
});
};
document.getElementById('submitButton').addEventListener('click', function (event) {
console.time('reCaptcha time');
if (siteKey && siteKey.value.length > 0 && action && action.value.length > 0) {
runCaptcha(siteKey.value, action.value)
.then(token => {
document.getElementById('txtCaptchaToken').value = token;
console.timeEnd('reCaptcha time');
if (form != null)
form.requestSubmit();
});
}
});
这确实是一个 Google 工程师的问题。他们可能只是在假设存在恶意的情况下对后续请求进行额外检查。