Implementing AWS Cognito Authentication in a React Application

Authentication is critical to modern web applications, ensuring secure access to resources and user data. AWS Cognito is a powerful tool that simplifies authentication while offering scalability and ease of integration. In this blog, we will walk through implementing AWS Cognito authentication in a React application using Vite.
What is AWS Cognito?
AWS Cognito is a managed service that provides user authentication, authorization, and user management for web and mobile apps. It supports various authentication methods, including username/password, social identity providers (Google, Facebook, etc.), and enterprise identity federation. AWS Cognito offers two main components:
User Pools: Handles user registration, authentication, and user profile management.
Identity Pools: Provides temporary AWS credentials for accessing AWS services.
In this blog, we will focus on implementing authentication using a Cognito User Pool.
Prerequisites
To follow along, you should have:
A basic understanding of React.
An AWS account.
Node.js installed on your machine.
Step 1: Setting Up AWS Cognito User Pool
Log in to the AWS Management Console: Navigate to the Cognito service.
Create a User Pool:
Go to Manage User Pools and click Create a User Pool.
Provide a name for your User Pool.
Configure the sign-in options (e.g., email or username).
Enable Multi-Factor Authentication (MFA) if required.
Configure the password policy and user attributes.
Click Create Pool to finalize the setup.
App Integration:
Go to the App clients section under the User Pool.
Create an App Client and note the
App Client ID
.Disable the client secret if you plan to use a front-end application.
Step 2: Install Vite and Set Up Your React Project
Create a new React project with Vite:
yarn create vite my-react-app --template react
Navigate to the project directory:
cd my-react-app
Install dependencies:
yarn
Step 3: Install AWS Amplify
AWS Amplify is a library that simplifies the integration of AWS services, including Cognito, into your React application.
Run the following command to install Amplify:
yarn add aws-amplify @aws-amplify/ui-react
Step 4: Configure AWS Amplify
Create a configuration file to connect your React app with the Cognito User Pool.
// src/aws-exports.js
const awsConfig = {
Auth: {
region: "<your-region>",
userPoolId: "<your-user-pool-id>",
userPoolWebClientId: "<your-app-client-id>",
},
};
export default awsConfig;
Replace <your-region>
, <your-user-pool-id>
, and <your-app-client-id>
with the values from your Cognito setup.
Step 5: Initialize Amplify
Initialize Amplify in your React app by importing and configuring it in your entry point (e.g., main.jsx
).
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import Amplify from "aws-amplify";
import awsConfig from "./aws-exports";
Amplify.configure(awsConfig);
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<App />
</React.StrictMode>
);
Step 6: Add Authentication Components
AWS Amplify provides pre-built UI components for authentication, making it easy to integrate sign-up, sign-in, and sign-out functionalities.
Import the
Authenticator
component from@aws-amplify/ui-react
:import { Authenticator } from "@aws-amplify/ui-react"; import "@aws-amplify/ui-react/styles.css";
Wrap your application with the
Authenticator
component:function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <h1>Welcome, {user.username}</h1> <button onClick={signOut}>Sign Out</button> </div> )} </Authenticator> ); } export default App;
Step 7: Customizing the Authentication Flow
You can customize the authentication flow and UI to match your application’s branding and user experience. AWS Amplify allows you to use custom components or hooks to build a tailored user experience.
Here’s an example of using the
Auth
module to handle sign-in programmatically:import { Auth } from "aws-amplify"; async function signIn(username, password) { try { const user = await Auth.signIn(username, password); console.log("Sign-in success", user); } catch (error) { console.error("Error signing in", error); } }
Step 8: Testing the Application
Run your React app using:
yarn dev
You should see the authentication UI. Test signing up and signing in with your configured User Pool.
Conclusion
AWS Cognito simplifies the implementation of authentication in web applications. By leveraging AWS Amplify, integrating Cognito into a React app becomes straightforward and efficient. With robust features like MFA, custom attributes, and secure user management, Cognito is an excellent choice for modern applications.
Start building secure and scalable authentication systems with AWS Cognito and React today!
Subscribe to my newsletter
Read articles from Vishal Kanu directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Vishal Kanu
Vishal Kanu
I work as a software engineer developing software mainly with React.