验证谷歌 reCaptcha 时输入响应和密码无效

Sim*_*son 6 javascript recaptcha node.js

在向 google recaptcha api 发出发布请求时,我真的很难获得成功的响应。我收到以下回复:

{
  "success": false,
  "error-codes": [
    "invalid-input-response",
    "invalid-input-secret"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我查看了reCAPTCHA - error-codes: 'missing-input-response', 'missing-input-secret' 在验证用户的响应时(缺少 POST 的详细信息),并尽可能密切地遵循答案,但没有成功。

这是我的文件如下:

var request = require('request');

module.exports = {
  verifyCaptcha: function(req, res) {

    var secret = 'SECRET_KEY';
    var response = JSON.stringify(req.body.response);
    request({
        url: 'https://www.google.com/recaptcha/api/siteverify',
        method: 'POST',
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
        body: `secret=${secret}&response=${response}`,
    }, function (err, response, body) {
        if (err) {
            res.status(500).send({
                error: "Could not verify captcha"
            });
        } else {
            res.status(200).send({
                message: body
            });
        }
    });
  },
}
Run Code Online (Sandbox Code Playgroud)

如果有人有解决此问题的方法,请告诉我!

小智 5

由于文档: https: //developers.google.com/recaptcha/docs/verify

invalid-input-secret: 秘密参数无效或格式错误。 也许您混合了 site_key 和 Secret_key。


ari*_*elb 2

您需要添加用户远程IP地址。

var user_ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
request({
    url: 'https://www.google.com/recaptcha/api/siteverify',
    method: 'POST',
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: `secret=${secret}&response=${response}&remoteip=${user_ip}`}...
Run Code Online (Sandbox Code Playgroud)

我发现您没有使用模板文字的另一件事是,您应该将引号更改为“而不是”。

或者,您应该使用现成的 reCaptcha 模块,如下所示:

https://www.npmjs.com/package/recaptcha

  • 远程 IP 是一个[可选参数](https://developers.google.com/recaptcha/docs/verify)。我将引号更改为 ` 但仍然遇到相同的错误。 (2认同)
  • 您得到“无效输入响应”、“无效输入秘密”,通常意味着您的密码不正确或者您没有从用户那里获得输入。你调试过它并看到你从用户那里得到了有效的响应输入吗? (2认同)