我試圖用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)庫要容易得多。如果你願意,我會通過一個例子。 –