Google Recaptcha v3始终返回错误

时间:2018-09-02 12:48:27

标签: recaptcha captcha recaptcha-v3

the instructions之后,我从前端获得了有效令牌(可以在开发工具中看到):

window.grecaptcha
  .execute(captchaPkey, { action: 'contact' })
  .then((token) => {
    // this is what I POST to my API

所以在我的React前端:

send = (event) => {
  event.preventDefault()
  this.setState({ busy: true })
  window.grecaptcha.ready(() => {
    window.grecaptcha
      .execute(captchaPkey, { action: 'contact' })
      .then((token) => {
        // successfully get token
        const payload = {
          token,
          name: this.state.name,
          to: this.props.to,
          email: this.state.email,
          message: this.state.message,
        }
        // now I'm sending the payload to my API
        // My API 
        update(`${api}/contact/`, {
          method: 'POST',
          body: JSON.stringify(payload)
        }, null)
          .then(data => {
            this.setState({ busy: false, result: 'Email sent' });
          })
          .catch(error => {
            this.setState({ busy: false, error: error.message });
          });
      })
  })
}

我的API控制器

async function verifyCaptcha(token) {
  return await axios.post('https://www.google.com/recaptcha/api/siteverify', {
    secret: process.env.CAPTCHA_PKEY,
    response: token
  })
}

async function contact({ token, to, name, email, message }) {
  const result = await verifyCaptcha(token)
  if (!result || !result.data || !result.data.success) {
    // always get an error here
    throw new Error('Invalid captcha')
  }
  let targetEmail = 'default@emailaddress'
  if (to !== 'admin') {
    const user = await User.findOne({ username: to }, { email }).exec()
    if (!user) {
      throw new Error('User does not exist')
    }
    targetEmail = user.email
  }

  // rest of send
}

在我的API POST端点上,发送给https://www.google.com/recaptcha/api/siteverify的正文包括

{
   secret: process.env.CAPTCHA_PKEY,
   response: token
}

但是我总是收到“ missing-input-response”,“ missing-input-secret”错误。这是因为v3是新的吗?还是虫子?

1 个答案:

答案 0 :(得分:0)

在文档中意识到它指出“张贴参数”而不是张贴身体哈哈。