我已经在我的网站中实施了Google的reaptcha v3。我已经在recaptcha设置页面的域名列表中添加了localhost、sitename.azurewebsites.net和sitename.com。
该代码在localhost上的开发中工作正常,但在azure发布的网站和实际网站上每次都失败。动作总是为空,因此分数总是为空。
为了举例说明,以下是在注册表单上的执行情况。
grecaptcha.ready(function () {
grecaptcha.execute('sitekeyhere', { action: 'register' })
.then(function (token) {
$.getJSON("/Home/RecaptchaV3Verify?token=" + token,
function (data) {
var score = data.score;
$("#RecaptchaScore").val(score);
console.log("Score is:" + score);
console.log(data);
});
});
});
这里是检查两个验证码的脚本,我的数学验证码和谷歌V3验证码的分数。
function check() {
var $errMessage = "Your captcha score indicates you are possibly a bot, form not submitted.";
var $answerValue = $("#realAnswer").val();
var $userInput = $("#ans").val();
var googleScore = parseFloat($("#RecaptchaScore").val());
if ($answerValue === $userInput && googleScore > 0.65) {
$("#register-form").submit();
}
$("#register-errors").append(
"<ul><li>" + $errMessage + "</li></ul><br />");
return false;
}
以下是本地主机的控制台日志
得分是:0.9
[object对象]:{action. "register", errorCodes: null, score: 0.9, success: true}。"register", errorCodes: null, score: 0.9, success: true}。
这里是sitename.azurewebsites.net的控制台日志,是的,我已经确认那里的viewource中的脚本和localhost中的脚本是一样的。
得分是:0
对象对象]
而从sitename.com得到的结果是一样的。
谁能解释这种行为,并可能有解决方案?我已经花了太多时间在这上面了。我的猜测是第一个脚本中的方法路径只能通过localhost工作,但我怎样才能让它在生产中工作?