Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33
⚛ A reCAPTCHA bridge for React Native that works (Android and iOS)
License
douglasjunior/react-native-recaptcha-that-works
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Users have recently observed a significant increase in "high risk requests" when using reCAPTCHA solution with WebView. Upon further investigation, we found that the official documentation advises against using WebView-based implementations for reCAPTCHA on iOS and Android.
Now, Google recommends using theirfirst-party solution for React Native, which is intended for enterprise use.
You can find more details and the discussionhere.
A reCAPTCHA library for React Native (Android and iOS) that works.
Looking forReact DOM version?
Normal | Invisible |
---|---|
![]() | ![]() |
Try theOnline demo.
yarn add react-native-recaptcha-that-works react-native-webview
Or
npm i -S react-native-recaptcha-that-works react-native-webview
See thereact-native-webview
Getting Started Guide.
WithJavaScript:
importReact,{useRef}from'react';import{View,Button}from'react-native';importRecaptchafrom'react-native-recaptcha-that-works';constApp=()=>{constrecaptcha=useRef();constsend=()=>{console.log('send!');this.recaptcha.current.open();}constonVerify=token=>{console.log('success!',token);}constonExpire=()=>{console.warn('expired!');}return(<View><Recaptcharef={recaptcha}siteKey="<your-recaptcha-public-key>"baseUrl="http://my.domain.com"onVerify={onVerify}onExpire={onExpire}size="invisible"/><Buttontitle="Send"onPress={send}/></View>);}
Or withTypeScript:
importReact,{useRef}from'react';import{View,Button}from'react-native';importRecaptcha,{RecaptchaRef}from"react-native-recaptcha-that-works";// ...exportconstComponent:React.FC=()=>{constrecaptcha=useRef<RecaptchaRef|null>(null);constsend=()=>{console.log('send!');recaptcha.current?.open();};constonVerify=(token:string)=>{console.log('success!',token);};constonExpire=()=>{console.warn('expired!');}return(<View><Recaptcharef={recaptcha}siteKey="<your-recaptcha-public-key>"baseUrl="http://my.domain.com"onVerify={onVerify}onExpire={onExpire}size="invisible"/><Buttontitle="Send"onPress={send}/></View>);};
For more details, see theSample Project.
Name | Value | Default | Description |
---|---|---|---|
headerComponent | React Element | A component to render on top of Modal. | |
footerComponent | React Element | A component to render on bottom of Modal. | |
loadingComponent | React Element | A custom loading component. | |
style | ViewStyle | Customize default style such as background color. | |
modalProps | ModalProps | Override the Modal props. | |
webViewProps | WebViewProps | Override the WebView props. | |
lang | string | Language code. | |
siteKey | string | (Required) Your Web reCAPTCHA site key. (The Web key must be used, not for Android) | |
baseUrl | string | (Required) The URL (domain) configured in the reCAPTCHA console setup. (ex.http://my.domain.com) (See also#34) | |
size | 'invisible' ,'normal' or'compact' | 'normal' | The size of the widget. |
theme | 'dark' or'light' | 'light' | The color theme of the widget. |
onLoad | function() | A callback function, executed when the reCAPTCHA is ready to use. | |
onVerify | function(token) | (Required) A callback function, executed when the user submits a successful response. The reCAPTCHA response token is passed to your callback. | |
onExpire | function() | A callback function, executed when the reCAPTCHA response expires and the user needs to re-verify. Only works if thewebview still open afteronVerify has been called for a long time. | |
onError | function(error) | A callback function, executed when reCAPTCHA encounters an error (usually network connectivity) and cannot continue until connectivity is restored. If you specify a function here, you are responsible for informing the user that they should retry. | |
onClose | function() | A callback function, executed when the Modal is closed. | |
recaptchaDomain | string | www.google.com | The host name of the reCAPTCHA valid api.See detail. |
gstaticDomain | string | www.gstatic.com | Customize reCAPTCHAgstatic host. |
hideBadge | boolean | false | Whensize = 'invisible' , you are allowed to hide the badge as long as you include the reCAPTCHA branding visibly in the user flow.See detail. |
enterprise | boolean (enterprise) | false | Use the newreCAPTCHA Enterprise API. Note: for enterprise you need to choose thesize when creating thesiteKey . |
action | string (enterprise) | Anadditional parameter for specifying the action name associated with the protected element for reCAPTCHA Enterprise API. |
Note: Iflang
is not set, then device language is used.
Name | Type | Description |
---|---|---|
open | function | Open the reCAPTCHA Modal. |
close | function | Close the reCAPTCHA Modal. |
Note: If usingsize="invisible"
, then challenge run automatically whenopen
is called.
This is a bug inreact-native-webview
(more details#65). PR opened inreact-native-webview/react-native-webview#3615.
This package utilizes the web version ofreCAPTCHA v2, so in thesiteKey
prop you need to use thesite public key from the reCAPTCHA console.

Create new reCAPTCHA v2 herehttps://www.google.com/recaptcha/admin/create
And thebaseUrl
prop must be a valid domain set in theDomains section.
<RecaptchasiteKey="abc123"baseUrl="http://mysite.com"/>
New features, bug fixes and improvements are welcome! For questions and suggestions, use theissues.
The MIT License (MIT)Copyright (c) 2020 Douglas Nassif Roma Junior
See the fulllicense file.
About
⚛ A reCAPTCHA bridge for React Native that works (Android and iOS)
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors5
Uh oh!
There was an error while loading.Please reload this page.