Я пытаюсь реализовать Invisible reCAPTCHA с помощью React и Redux Form. В общем, рабочий процесс Invisible reCAPTCHA:
- Визуализируйте «невидимую» CAPTCHA, вернув ее ID виджета.
- Вызов
grecaptcha.execute
с идентификатором виджета. При необходимости пользователю будет предложено решить задачу. Результат передается в функцию обратного вызова, указанную при визуализации CAPTCHA. - Отправьте форму вместе с результатом CAPTCHA.
Я создал компонент React, предназначенный для использования с Field
Redux Form, который отображает 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
вместе с идентификатором виджета при отправке формы пользователем. Я не могу вызвать его в onSubmit
, потому что ID виджета там недоступен. Я мог бы вызвать это в ReCaptcha
сразу после рендеринга CAPTCHA, но если пользователю нужно решить CAPTCHA, ему будет предложено сделать это, как только форма будет отрисована.
Этот минимальный рабочий пример показывает, чего я достиг на данный момент.