如何解决ReCaptcha Enterprise api 调用始终返回 0 分,但仪表板显示每个分数都为 0.8 或更高
我为前端创建了一个 ReCaptcha Enterprise 项目,并尝试在 AWS Lambda 中验证评估。
ReCaptcha 项目如下所示:ReCaptcha Settings
前端代码是一个反应应用程序,但我只是按照文档使用脚本。这一切似乎都有效。我可以解决验证码并得到答案。
const [captchaAnswer,setCaptchaAnswer] = useState<string | null>(null);
useEffect(() => {
const script = document.createElement('script');
script.src = "https://www.google.com/recaptcha/enterprise.js";
script.async = true;
script.defer = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
}
},[]);
window.reCaptchaCallback = function (response: string) {
setCaptchaAnswer(response);
};
const submit = () => {
//Submits the answer to my lambda
}
return (
<div className="g-recaptcha" data-sitekey="<SITEKEY>" data-callback="reCaptchaCallback" />
);
接下来是作为 Cognito 触发器调用的 lambda。
const axios = require("axios");
const config = {
PROJECT_ID: "<PROJECTID>",API_KEY: "<APIKEY>",//actually gotten from secret manager
SITE_KEY:"<SITEKEY>"
};
exports.handler = async (event) => {
console.log(event);
if (event.triggerSource === "PreSignUp_Admincreateuser") {
return event;
}
if (!event.request.validationData) {
throw new Error('Missing validation data');
}
try {
const verifyResponse = await axios({
method: 'post',url: `https://recaptchaenterprise.googleapis.com/v1beta1/projects/${config.PROJECT_ID}/assessments?key=${config.API_KEY}`,body: {
event: {
token: event.request.validationData.token,//I have confirmed this is correctly passed from front end to here
siteKey: config.SITE_KEY
expectedAction: "" //Tried it with and without this. Documentation say it isn't being used
}
},headers: { "Content-Type": "application/x-www-form-urlencoded" }
});
console.log(JSON.stringify(verifyResponse.data));
if (verifyResponse.data.score >= 0) {
event.response.autoConfirmUser = true;
return event;
} else {
throw new Error('Recaptcha verification Failed');
}
} catch (error) {
console.error(error);
throw new Error("Recaptcha verification Failed. Please retry");
}
};
这是我一直得到的回应。
{
"name": "projects/<PROJECT>/assessments/924d7fc3f0000000","score": 0,"reasons": []
}
然而,recaptcha dashboard 显示所有评估都 >= 0.8 我不知道我做错了什么。感谢您的帮助。
解决方法
根据我的经验,响应中缺少 tokenProperties
意味着 googleapis.com 未能读取您的 POST 数据。
对于您的情况,首先预期的内容类型应该是 json:
"Content-Type": "application/json; charset=utf-8"
如果更改以上内容不能解决问题,请尝试将 post 数据从 object/dict/json 也更改为 string。
tips:一般来说,当我们在代码中无法得到预期的响应时,我们可以尝试在像 curl 或 jmeter 这样的直接工具中试验目标请求以找出问题所在,然后将解决方案复制回我们的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。