我试图用React和Redux窗体实现Invisible reCAPTCHA。通常,隐形reCAPTCHA工作流程如下:使用Redux表单实现隐形reCAPTCHA
- 呈现“不可见”CAPTCHA,返回其窗口小部件ID。
- 调用
grecaptcha.execute
与小部件的ID。如有必要,用户将被提示解决挑战。结果被传递给在渲染CAPTCHA时指定的回调函数。 - 与CAPTCHA结果一起提交表格。
我创建了旨在与终极版Form的Field
呈现的CAPTCHA并更新grecaptcha.execute
后的形式状态被称为使用的阵营组件:
class ReCaptcha extends React.Component {
render() {
return <div ref={div => this.container=div} />
}
componentDidMount() {
const { input: { onChange }, sitekey } = this.props
grecaptcha.render(this.container, {
sitekey,
size: "invisible",
callback: onChange
})
}
}
不过,我不知道如何或者在用户提交表单时将grecaptcha.execute
与小部件ID一起呼叫的位置。我无法在onSubmit
中调用它,因为那里无法访问控件ID。我可以在渲染CAPTCHA后立即在ReCaptcha
中调用它,但如果用户需要解开CAPTCHA,他会在窗体渲染后立即提示。
这个minimal working example显示了我迄今取得的成就。
我已经想通了,它与[scriptjs(https://github.com/ded/script.js)库要容易得多。如果你愿意,我会通过一个例子。 –