Google Recaptcha 无法使用 axios
Google Recaptcha not working with 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'}
}
我总是遇到错误
{ success: false,
'error-codes': [ 'missing-input-response', 'missing-input-secret' ] }
我用邮递员试过了,效果很好。我的 header 有问题吗?
您需要为您的请求再添加一个密钥:secret
。报错信息是发送POST请求时缺少response
和secret
参数引起的。
UPDATE:文档中的 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"
},
},
);
参考:Doc
我设法通过添加参数解决了这个问题。
我会接受 Ryan Wus 答案因为它基本上是不同的写作。
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'}
}
The POST params in the doc are not JSON, they must be passed as query string. That's why the error says it's missing both missing-input-response and missing-input-secret
与最高答案相反,只是语法更短:
axios.post('https://www.google.com/recaptcha/api/siteverify', undefined, {
params: {
secret: RECAPTCHA_V3_SECRET,
response: recaptchaToken
}
})
我在尝试验证我的 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'}
}
我总是遇到错误
{ success: false,
'error-codes': [ 'missing-input-response', 'missing-input-secret' ] }
我用邮递员试过了,效果很好。我的 header 有问题吗?
您需要为您的请求再添加一个密钥:secret
。报错信息是发送POST请求时缺少response
和secret
参数引起的。
UPDATE:文档中的 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"
},
},
);
参考:Doc
我设法通过添加参数解决了这个问题。 我会接受 Ryan Wus 答案因为它基本上是不同的写作。
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'}
}
The POST params in the doc are not JSON, they must be passed as query string. That's why the error says it's missing both missing-input-response and missing-input-secret
与最高答案相反,只是语法更短:
axios.post('https://www.google.com/recaptcha/api/siteverify', undefined, {
params: {
secret: RECAPTCHA_V3_SECRET,
response: recaptchaToken
}
})