DEV Community

Cover image for Enhancing React Native App Security with Google reCAPTCHA v3
Amit Kumar
Amit Kumar

Posted on

Enhancing React Native App Security with Google reCAPTCHA v3

Introduction:

In today's digital age, ensuring the security and integrity of online platforms is paramount. One widely used method to combat spam and abuse is Google reCAPTCHA. In this post, we'll explore how to integrate Google reCAPTCHA v3 into a React Native app using the @haskkor/react-native-recaptchav3 library.

First, let's take a quick look at what Google reCAPTCHA v3 is and why it's valuable.


Image description


Google reCAPTCHA v3:

Google reCAPTCHA is a free service offered by Google that helps protect websites and apps from spam and abuse. Unlike its predecessors, reCAPTCHA v3 runs in the background without requiring user interaction, making the user experience seamless while still providing robust protection.

Key features of reCAPTCHA v3 include:

1). Invisible Protection: Users don't need to solve puzzles or click checkboxes, improving usability.
2). Risk Analysis: reCAPTCHA v3 assigns a score to each user action, allowing you to take appropriate measures based on the risk level.
3). Easy Integration: Google provides libraries and APIs for various platforms, simplifying the implementation process.

Visual Guide:

Implementing Google reCAPTCHA v3 in React Native

Image description


Getting Started:

Register with Google reCAPTCHA:

Visit Google reCAPTCHA Admin Console to register a new site.

  • Choose reCAPTCHA v3 as the type and whitelist the domain name without 'https://', for example, 'your-domain.com'.
  • After registration, you'll receive a Site Key and a Secret Key.

Package.json Dependencies
Below are the dependencies specified in the package.json file for a React Native project:

{
    "dependencies": {
    "@haskkor/react-native-recaptchav3": "^1.2.1",
    "react": "18.2.0",
    "react-native": "0.72.3",
    "react-native-webview": "^11.18.1"
  },
}
Enter fullscreen mode Exit fullscreen mode

Now, let's dive into the implementation using React Native and @haskkor/react-native-recaptchav3.

Implementation Steps:

1. Install Dependencies:
Start by installing the @haskkor/react-native-recaptchav3 library using npm or yarn:

npm install @haskkor/react-native-recaptchav3
# or
yarn add @haskkor/react-native-recaptchav3

Enter fullscreen mode Exit fullscreen mode

2. Import Required Modules:
In your React Native component file, import the necessary modules and utilities:

import React, { useRef, useState } from 'react';
import { View, StyleSheet, TouchableOpacity, Text } from 'react-native';
import ReCaptchaV3 from '@haskkor/react-native-recaptchav3';

Enter fullscreen mode Exit fullscreen mode

3. Implement the Captcha Component:
Define your Captcha component, which will handle the reCAPTCHA functionality:

const CaptchaV3Lib1 = () => {
  const [show, setShow] = useState(false);
  const [captchaToken, setCaptchaToken] = useState('');
  const captchaRef = useRef(null);

  const handleTokenReceive = (token) => {
    setCaptchaToken(token);
    captchaRef.current = token;
    setShow(false);
  };

  const handleRefreshToken = () => {
    setShow(true);
    if (captchaRef.current) {
      captchaRef.current.refreshToken();
    }
  };
  return (
    <View style={styles.container}>
      {show ? (
        <ReCaptchaV3
          ref={captchaRef}
          captchaDomain={'https//yourDomain.com'} // same domain which you mention on google captcha console
          siteKey={Your Site Key}
          onReceiveToken={handleTokenReceive}
        />
      ) : null}

      <TouchableOpacity
        style={styles.buttonContainer}
        onPress={handleRefreshToken}>
        <Text style={styles.txt}>Open Captcha V3</Text>
      </TouchableOpacity>
    </View>
  );
};

Enter fullscreen mode Exit fullscreen mode

Token Verification

Implementing Secure Authentication: The snippet below illustrates backend code used to authenticate tokens sent from a React Native application in JS

export const validateCaptchaToken = async (token = '', callback = {}) => {
  const params = {
    secret: YOUR_SECRET_KEY,
    response: YOUR_TOKEN,
  };

  try {
    const postData = new URLSearchParams(params).toString();
    const options = {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
      },
    };

    const response = await fetch(SITE_VERIFY_URL, {
      ...options,
      body: postData,
    });

    if (response?.ok && response?.status === 200) {
      // do you code here
    } else {
      // handle the failure case here
    }
  } catch (error) {
    // handle the failure case here
  }
};
Enter fullscreen mode Exit fullscreen mode

Conclusion:

Implementing Google reCAPTCHA v3 in React Native using @haskkor/react-native-recaptchav3 is a straightforward process that enhances your app's security without compromising user experience. By integrating reCAPTCHA v3, you can effectively mitigate spam and abuse while providing a seamless interaction for your users.

Feel free to modify the code and styles according to your project requirements. Happy coding!

References:

Feel free to customize the content further or add additional details as needed!

Top comments (0)