DEV Community

Chris Wang
Chris Wang

Posted on

2

AWS Cognito Sign Up Confirm with Node.js

Let's add AWS Cognito Sign Up Confirm function to the Node project today.
I suppose your project already add AWS Cognito Sign Up to your project.

If not, please take a look at my provious articles:

Also, you can download the full codebase here if you are interested in this AWS Cognito Sign Up Email Confirm.

Add a AWS Cognito Sign Up Email Confirm route

import controller from '../controllers/auth.controller';
import {
  validateSignupRequest,
  validateSignupConfirmRequest,
} from '../middleware';

export default (app) => {
  app.post('/api/auth/signup', validateSignupRequest, controller.signup);
  app.post(
    '/api/auth/email/verify',
    validateSignupConfirmRequest,
    controller.signupConfirm,
  );
};
Enter fullscreen mode Exit fullscreen mode

Add a Sign Up Email Confirm Function in the auth controller.

// User Signup
import CognitoIdentity from '../services/cognito';

const CognitoIdentityService = CognitoIdentity();

const signup = async (req, res) => {
  // Signup logic here
  // ...

  const { email, password, givenname, familyname } = req.body;

  const cognitoParams = {
    username: email,
    password,
    givenname,
    familyname,
  };

  try {
    const cognitoUser = await new Promise((resolve, reject) => {
      CognitoIdentityService.signup(cognitoParams, (err, user) => {
        if (err) {
          reject(err);
        } else {
          resolve(user);
        }
      });
    });

    res.status(200).send({
      success: true,
      message: 'User registered successfully',
      user: cognitoUser,
    });
  } catch (error) {
    res.status(400).send({ success: false, message: error.message, error });
  }
};

const signupConfirm = async (req, res) => {
  const { email, code } = req.body;
  const cognitoParams = {
    username: email,
    confirmationCode: code,
  };

  try {
    await new Promise((resolve, reject) => {
      CognitoIdentityService.signupConfirm(cognitoParams, (err, user) => {
        if (err) {
          reject(err);
        } else {
          resolve(user);
        }
      });
    });

    // DB logic here
    // ...

    res.status(200).send({
      success: true,
      message: 'User email confirmed successfully',
      user: {
        user_confirmed: true,
      },
    });
  } catch (error) {
    res.status(400).send({ success: false, message: error.message, error });
  }
};

export default {
  signup,
  signupConfirm,
};
Enter fullscreen mode Exit fullscreen mode

Add a Sign Up Email Confirm in the services.

And then we need to add the AWS Cognito user authentication service to the services folder. I will use the amazon-cognito-identity-js for the service.
If you don't understand how to work the service, please check the service folder structure on my git repository.

services/
  └──cognito/
        ├── index.js
        └── methods/
              ├── index.js
              ├── signup.js
              └── signupConfirm.js

Enter fullscreen mode Exit fullscreen mode

This is a signupConfirm file, please add it.

import { CognitoUserPool, CognitoUser } from 'amazon-cognito-identity-js';

/**
 * Confirm the signup action
 * @param {*} poolData
 * @param {{username, confirmationCode}} body
 * @param {*} callback
 */

const signupConfirm = (poolData, body, callback) => {
  const userPool = new CognitoUserPool(poolData);

  const { username, confirmationCode } = body;

  const userData = {
    Username: username,
    Pool: userPool,
  };

  const cognitoUser = new CognitoUser(userData);

  cognitoUser.confirmRegistration(confirmationCode, true, (err, res) =>
    callback(err, res),
  );
};

export default signupConfirm;
Enter fullscreen mode Exit fullscreen mode

The Result in the Postman

Cognito email verification

We will take a look at AWS Cognito login in the next article.
If you like this type of content you can give me a star on my GitHub repository for the latest updates.

References

https://github.com/itwebtiger/express-amazon-cognito/tree/cognito-signupconfirm
https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-social-idp.html#cognito-user-pools-social-idp-step-1

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs