Google Recaptcha无法与axios一起使用

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)


Rya*_* Wu 9

您需要在请求中再添加一个密钥:secret。该错误消息是由发送POST请求时缺少responsesecret参数引起的。

更新:文档中的POST参数不是JSON,必须将它们作为查询字符串传递。这就是为什么该错误说明它同时缺少missing-input-responsemissing-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)

参考:文档


Ruc*_*Bee 5

/sf/answers/3365872051/

文档中的 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)