Sil*_*611 4 recaptcha node.js axios
尝试验证我的Recaptcha女巫axios时遇到错误
try{
let result = await axios.post(
'https://www.google.com/recaptcha/api/siteverify',
{
secret: '6LcarRkTAAAAAPDNrruugUg1fJqOJnH-uvVa5KIL',
response: response
},
{
headers: {
"Content-Type": "application/json"
}
});
let data = result.data || {};
if(!data.success){
throw({
success: false,
error: 'response not valid'
})
}
}catch(err){
console.log(err);
throw err.response ? err.response.data : {success: false, error: 'verifyCatpcha Error'}
}
Run Code Online (Sandbox Code Playgroud)
我总是出错
{ success: false,
'error-codes': [ 'missing-input-response', 'missing-input-secret' ] }
Run Code Online (Sandbox Code Playgroud)
我尝试了邮递员,它工作正常。标头出了点问题?
Sil*_*611 10
我设法通过添加参数来解决它。我会接受Ryan Wu 的回答,因为它与不同的写作基本相同。
try{
let result = await axios({
method: 'post',
url: 'https://www.google.com/recaptcha/api/siteverify',
params: {
secret: '6LcarRkTAAAAAPDNrruugUg1fJqOJnH-uvVa5KIL',
response: response
}
});
let data = result.data || {};
if(!data.success){
throw({
success: false,
error: 'response not valid'
})
}
}catch(err){
console.log(err);
throw err.response ? err.response.data : {success: false, error: 'captcha_error'}
}
Run Code Online (Sandbox Code Playgroud)
您需要在请求中再添加一个密钥:secret。该错误消息是由发送POST请求时缺少response和secret参数引起的。
更新:文档中的POST参数不是JSON,必须将它们作为查询字符串传递。这就是为什么该错误说明它同时缺少missing-input-response和missing-input-secret
axios.post(
`https://www.google.com/recaptcha/api/siteverify?secret=${secret}&response=${response}`,
{},
{
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
},
},
);
Run Code Online (Sandbox Code Playgroud)
参考:文档
文档中的 POST 参数不是 JSON,它们必须作为查询字符串传递。这就是为什么错误说它缺少缺少输入响应和缺少输入秘密
与最高答案并不相反,只是更短的语法:
axios.post('https://www.google.com/recaptcha/api/siteverify', undefined, {
params: {
secret: RECAPTCHA_V3_SECRET,
response: recaptchaToken
}
})
Run Code Online (Sandbox Code Playgroud)