Skip to content
Welcome to the new, Chris Portfolio! đź‘‹
Projects
Cognito Sign Up Confirm

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:

ArticleCodebase
ES6 Node-Express Boilerplatehttps://github.com/itwebtiger/express-amazon-cognito/tree/init-expressjs (opens in a new tab)
AWS Cognito Setup----
AWS Cognito Sign Up with Node.jshttps://github.com/itwebtiger/express-amazon-cognito/tree/cognito-signup (opens in a new tab)

Also, you can download the full codebase (opens in a new tab) here if you are interested in this AWS Cognito Sign Up Email Confirm.


Add a AWS Cognito Sign Up Email Confirm route

auth.routes.js
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,
  );
};

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

auth.controller.js
// 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,
};

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 (opens in a new tab).

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

This is a signupConfirm file, please add it.

signupConfirm.js
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;

The Result in the Postman

Cognito email verification


References

https://github.com/itwebtiger/express-amazon-cognito/tree/cognito-signupconfirm (opens in a new tab) https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-social-idp.html#cognito-user-pools-social-idp-step-1 (opens in a new tab)