You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS后端验证reCAPTCHA遇阻:报错missing-input-response与missing-input-secret

解决NodeJS中reCAPTCHA验证的missing-input-response/missing-input-secret错误

嘿,我来帮你搞定这个问题!你遇到的这两个错误,核心原因是请求参数的传递方式不符合Google reCAPTCHA接口的要求。

问题根源

Google的siteverify接口要求参数通过**表单编码(application/x-www-form-urlencoded)**的方式发送,而你直接把secret和response放在了request的options根对象里——request库不会自动把这些参数转换成正确的格式,导致服务器根本没收到必要的参数,所以才返回缺失错误。

修复后的request库代码

把参数放进form字段里,request就会自动帮你处理成正确的表单编码格式:

var request = require('request');

function verifyRecaptcha(recaptchaToken, callback) {
  // 替换成你的reCAPTCHA服务器端秘钥
  const SECRET_KEY = 'MY_SECRET';

  request.post(
    'https://www.google.com/recaptcha/api/siteverify',
    {
      form: { // 关键:参数必须放在form对象中
        secret: SECRET_KEY,
        response: recaptchaToken
      }
    },
    function (error, response, body) {
      if (error) {
        console.error('验证请求失败:', error);
        return callback(false);
      }

      if (response.statusCode === 200) {
        // 注意:返回的body是JSON字符串,必须先解析成对象
        const verificationResult = JSON.parse(body);
        console.log('reCAPTCHA验证结果:', verificationResult);
        // 回调返回验证是否成功
        callback(verificationResult.success);
      } else {
        console.error('验证接口响应异常,状态码:', response.statusCode);
        callback(false);
      }
    }
  );
}

额外注意事项

  • 确认SECRET_KEY是服务器端秘钥(在Google reCAPTCHA控制台的“密钥设置”里获取),不要用客户端的Site Key
  • recaptchaToken必须是前端用户完成验证后,传给后端的那个响应token,不能为空
  • request库已经被官方标记为废弃(deprecated),如果是新项目,推荐使用node-fetch或axios这类维护活跃的库,下面给个node-fetch的示例:
const fetch = require('node-fetch');

async function verifyRecaptcha(recaptchaToken) {
  const SECRET_KEY = 'MY_SECRET';

  try {
    const response = await fetch('https://www.google.com/recaptcha/api/siteverify', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      body: new URLSearchParams({
        secret: SECRET_KEY,
        response: recaptchaToken
      })
    });

    const result = await response.json();
    return result.success;
  } catch (error) {
    console.error('reCAPTCHA验证出错:', error);
    return false;
  }
}

内容的提问来源于stack exchange,提问作者Chris Allinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:18:30