繁体   English   中英

如何使用 react-google-recaptcha 重置 Google recaptcha

[英]How to reset Google recaptcha with react-google-recaptcha

看起来 google recaptcha 的工作方式是,如果使用特定令牌进行了验证尝试,则无法再次使用。

文档指出“您将需要调用 grecaptcha.reset() 以要求最终用户再次使用 reCAPTCHA 进行验证”

我正在尝试使用 react-google-recaptcha npm 包尝试此操作。

这是我的代码:

function onChange(grecaptcha) {
  console.log(grecaptcha);
  grecaptcha.reset(); // this doesn't work
}

class Captcha extends React.Component {
  render() {
    return <div>
      <Recaptcha
          sitekey='#'
          onChange={onChange(this)}
      /> </div> 
  }
}

当我尝试使用带有响应和秘密值的 google api https://www.google.com/recaptcha/api/siteverify进行服务器端验证时,成功响应在第一次验证后始终评估为“false”。 为了防止这种情况,我按照文档中的建议重置了 grecaptcha,但它不起作用。

有什么我想念的吗?

提前致谢

编辑:

https://github.com/dozoisch/react-google-recaptcha提供了 reset() 实用程序功能,这是我在用户解决验证码后尝试调用的功能,想知道我是否没有正确调用它。

我遇到了类似的问题,不得不将其更改为:

window.grecaptcha.reset();

你可以试试Reaptcha

在处理 reCAPTCHA 时,它比react-google-recaptcha有更多的反应方式。

引用文档:

<Reaptcha
  ref={e => (this.captcha = e)}
  sitekey="YOUR_API_KEY"
  onVerify={() => {
    // Do something
  }}
/>
<button onClick={this.captcha.reset}>
  Reset
</button>

嗯,这只是上述所有内容的奖励或更详细的方式。 我正在使用 react-google-recaptcha 所以这是 reactJS,直到我看到这个,我才找到了解决重置问题的方法。 这是相当直接的。 正如@sarneeh、@Chris 和@AdityaSrivast 所指出的那样,我只是向大多数新手解释我认为我正在如何做

这是我的代码片段。

验证码

import React from "react";
import ReCAPTCHA from "react-google-recaptcha";


const CaptchaVerify = ({yourprops}) => {

 let captcha;

 const onChange = (value) => {
    console.log(value);      
 }

 const setCaptchaRef = (ref) => {
    if (ref) {
      return captcha = ref;
    }
 };

 const resetCaptcha = () => {
   // maybe set it till after is submitted
   captcha.reset();
 }

 return (
   <ReCAPTCHA
     ref={(r) => setCaptchaRef(r) }
     sitekey={process.env.REACT_APP_V2_CAPTCHA_SITE_KEY}
     onChange={onChange, () => resetCaptcha()}
     theme="light"
   />
  )
 };

export default CaptchaVerify;

首先为元素设置一个合适的范围变量,然后使用 ref 回调分配它:

let captcha;

<Recaptcha
  sitekey={sitekey}
  onChange={...}
  ref={el => { captcha = el; }}
/>

然后,您可以在需要时通过调用captcha.reset()来访问重置功能(例如,成功发送消息后的回调、注册等)。 希望有帮助。

google-react-recaptcha 遵循以下语法:

<ReCAPTCHA
    sitekey="Your client site key"
    onChange={onChange}
/>

您可以使用 reset() 组件实例进行重置。 要访问它,您需要一个ref

像这样进行:

<ReCAPTCHA
    ref={(r) => this.captcha = r}
    sitekey="Your client site key"
    onChange={onChange}
/>

现在,无论何时您想重置 recaptcha,请输入:

this.captcha.reset()

你会完成的。

理想情况下,您应该在提交表单后,在收到回复后执行此操作。

具有功能组件和 createRef 的解决方案:

在函数体中:

  const recaptchaRef = React.createRef();

在 JSX 中:

  <ReCAPTCHA
            ref={recaptchaRef}
            name="recaptcha"
            id="recaptcha"
            sitekey="...."
            onChange={(token)=>{console.log(token);}}
            onExpired={() => {
              recaptchaRef.current.reset(); // here
            }}
            theme="light"
          />

在 TypeScript 中,您可以这样做:

const recaptchaRef = useRef<ReCAPTCHA>(null);
/* make sure it is null at first */

然后:

<ReCAPTCHA
  ref={recaptchaRef}
  sitekey={'key'}
  onChange={(e) => onCaptchaVerify(`${e}`)}
/>;

然后您可以在表单提交后或在您想要重置 reCaptcha 的地方使用这样的:

  recaptchaRef.current?.reset();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM