DEV Community

Cover image for How to Implement User Registration and Email Verification in React
Samuel C. Okanume
Samuel C. Okanume

Posted on • Edited on

How to Implement User Registration and Email Verification in React

Introduction to Email Verification in React Frontend Applications

Audience: This tutorial is intended for web developers using React to build applications requiring user registration and email verification functionalities.

This article will guide you through the process of implementing user registration and email verification in a React frontend application. Email verification is an essential step in ensuring the authenticity of user accounts and preventing spam or fraudulent registrations.

In this tutorial, we will cover the following topics:

  1. Designing the email verification user interface in React

  2. Sending email verification links in React using a backend service

  3. Handling email verification token validation in React

  4. Implementing email verification success and error messages in React

  5. Integrating email verification with user registration in React

Let's get started!

Designing the Email Verification User Interface in React

Before we dive into the implementation details, let's design the user interface (UI) for the email verification process. In this example, we'll assume a simple UI with an email input field and a "Verify" button.

Here's a basic example of the email verification component in React:

import React, { useState } from 'react';

const EmailVerification = () => {
  const [email, setEmail] = useState('');

  const handleEmailChange = (event) => {
    setEmail(event.target.value);
  };

  const handleVerifyClick = () => {
    // TODO: Implement email verification logic
  };

  return (
    <div>
      <input
        type="email"
        value={email}
        onChange={handleEmailChange}
        placeholder="Enter your email"
      />
      <button onClick={handleVerifyClick}>Verify</button>
    </div>
  );
};

export default EmailVerification;
Enter fullscreen mode Exit fullscreen mode

In this code snippet, we define a functional component EmailVerification that manages the state of the email input field using the useState hook. When the user enters an email address and clicks the "Verify" button, we will implement the email verification logic.

Sending Email Verification Links in React Using a Backend Service

To send email verification links, we need a backend service that handles the email sending process. For the sake of simplicity, let's assume we have a REST API endpoint /api/send-verification-email that accepts a POST request with the user's email address and sends an email with a verification link.

Here's an example of how to send the email verification request from the frontend in React:

import axios from 'axios';

const handleVerifyClick = async () => {
  try {
    const response = await axios.post('/api/send-verification-email', {
      email,
    });

    console.log('Email sent successfully!', response.data);
  } catch (error) {
    console.error('Failed to send email:', error);
  }
};
Enter fullscreen mode Exit fullscreen mode

In this code snippet, we use the axios library to make an asynchronous POST request to the /api/send-verification-email endpoint with the user's email address. If the request is successful, we log a success message to the console. Otherwise, we log an error message.

Make sure to replace /api/send-verification-email with the actual URL of your backend service.

Handling Email Verification Token Validation in React

Once the user receives the email verification link and clicks on it, they will be redirected to your React application. At this point, we need to handle the validation of the email verification token to confirm the user's email address.

To handle the token validation, we can extract the token from the URL and send a request to a backend endpoint to verify its validity. Again, for simplicity, let's assume we have a backend endpoint /api/verify-email that accepts a GET request with the email verification token.

Here's an example of how to handle the email verification token validation in React:

import { useEffect } from 'react';
import { useHistory, useLocation } from 'react-router-dom';
import axios from 'axios';

const EmailVerificationSuccess = () => {
  const history = useHistory();
  const location = useLocation();

  useEffect(() => {
    const token = new URLSearchParams(location.search).get('token');

    const verifyEmail = async () => {
      try {
        const response = await axios.get('/api/verify-email', {
          params: { token },
        });

        console.log('Email verified successfully!', response.data);

        // Redirect the user to a success page or perform other actions
        history.push('/verification-success');
      } catch (error) {
        console.error('Failed to verify email:', error);

        // Redirect the user to an error page or perform other actions
        history.push('/verification-error');
      }
    };

    if (token) {
      verifyEmail();
    } else {
      console.error('Email verification token not found!');
      history.push('/verification-error');
    }
  }, [history, location.search]);

  return null; // or display a loading spinner
};

export default EmailVerificationSuccess;
Enter fullscreen mode Exit fullscreen mode

In this code snippet, we use the useHistory and useLocation hooks from React Router to access the current URL and navigate the user to different pages. We extract the email verification token from the URL parameters and send a GET request to the /api/verify-email endpoint. If the token is valid, we log a success message and redirect the user to a success page. Otherwise, we log an error message and redirect the user to an error page.

Make sure to replace /api/verify-email with the actual URL of your backend endpoint.

Implementing Email Verification Success and Error Messages in React

To provide feedback to the user regarding the email verification process, we can display success and error messages based on the response received from the backend.

Here's an example of how to implement email verification success and error messages in React:

import { useState } from 'react';
import axios from 'axios';

const EmailVerification = () => {
  const [email, setEmail] = useState('');
  const [verificationStatus, setVerificationStatus] = useState(null);

  const handleEmailChange = (event) => {
    setEmail(event.target.value);
  };

  const handleVerifyClick = async () => {
    try {
      const response = await axios.post('/api/send-verification-email', {
        email,
      });

      setVerificationStatus('success');
      console.log('Email sent successfully!', response.data);
    } catch (error) {
      setVerificationStatus('error');
      console.error('Failed to send email:', error);
    }
  };

  let statusMessage = null;
  if (verificationStatus === 'success') {
    statusMessage = <div>Email sent successfully!</div>;
  } else if (verificationStatus === 'error') {
    statusMessage = <div>Failed to send email. Please try again.</div>;
  }

  return (
    <div>
      <input
        type="email"
        value={email}
        onChange={handleEmailChange}
        placeholder="Enter your email"
      />
      <button onClick={handleVerifyClick}>Verify</button>
      {statusMessage}
    </div>
  );
};

export default EmailVerification;
Enter fullscreen mode Exit fullscreen mode

In this code snippet, we introduce a new state variable verificationStatus to keep track of the email verification status. After sending the verification email, we update the status accordingly ('success' or 'error') and display the corresponding message below the input field.

Integrating Email Verification with User Registration in React

Now that we have implemented the email verification process, we can integrate it with the user registration flow in React. When a user registers with their email and other required information, we should send them a verification email before considering their registration complete.

Here's an example of integrating email verification with user registration in React:

import { useState } from 'react';
import axios from 'axios';

const UserRegistration = () => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [registrationStatus, setRegistrationStatus] = useState(null);

  const handleEmailChange = (event) => {
    setEmail(event.target.value);
  };

  const handlePasswordChange = (event) => {
    setPassword(event.target.value);
  };

  const handleRegisterClick = async () => {
    try {
      const response = await axios.post('/api/register', {
        email,
        password,
      });

      setRegistrationStatus('success');
      console.log('Registration successful!', response.data);
    } catch (error) {
      setRegistrationStatus('error');
      console.error('Failed to register:', error);
    }
  };

  let statusMessage = null;
  if (registrationStatus === 'success') {
    statusMessage = <div>Registration successful! Please check your email to verify your account.</div>;
  } else if (registrationStatus === 'error') {
    statusMessage = <div>Failed to register. Please try again.</div>;
  }

  return (
    <div>
      <input
        type="email"
        value={email}
        onChange={handleEmailChange}
        placeholder="Enter your email"
      />
      <input
        type="password"
        value={password}
        onChange={handlePasswordChange}
        placeholder="Enter your password"
      />
      <button onClick={handleRegisterClick}>Register</button>
      {statusMessage}
    </div>
  );
};

export default UserRegistration;
Enter fullscreen mode Exit fullscreen mode

In this code snippet, we add a password input field to the registration form. After successful registration, we update the registrationStatus state to 'success' and display a message instructing the user to check their email for verification.

Conclusion

Now that you have successfully implemented user registration and email verification in a React frontend application. By following this guide, you've learned how to design the email verification user interface, send email verification links using a backend service, handle email verification token validation, implement email verification success and error messages, and integrate email verification with user registration.

Remember, email verification is an important step in ensuring the security and authenticity of user accounts. Feel free to customize and enhance this implementation based on your application's requirements and specific backend services.

Happy coding!

Top comments (6)

Collapse
 
jannisdev profile image
Info Comment hidden by post author - thread only accessible via permalink
Jannis

My ChatGPT senses are tingling..

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
jannisdev profile image
Jannis

Improved or just only ChatGPT? πŸ€”

Collapse
 
abidullah786 profile image
ABIDULLAH786

Mine also😊

Collapse
 
vulcanwm profile image
Medea

really informative post!

Collapse
 
rajapoudel profile image
Raja Poudel

Thank you. Your explanation is very much easy to understand. Appreciate your work.

Some comments have been hidden by the post's author - find out more