Aws cognito create user by admin nodejs

Viewed 9043

I am using javascript sdk amazon-cognito-identity-js and i am trying to create a user in cognito in nodejs but error is coming below is my code:-

var AWS = require("aws-sdk")
var params = {
    UserPoolId: "id",
    Username: req.body.username,
    DesiredDeliveryMediums: ["EMAIL"],
    ForceAliasCreation: false,
    TemporaryPassword: req.body.password,
    UserAttributes: [
      { Name: "name", Value: req.body.name },
      { Name: "email", Value: req.body.user_email}
    ],
 };
let client = new AWS.CognitoIdentityServiceProvider();
client.adminCreateUser(params, function(err, data) {
    if (err) {
        console.log("EE",err);
      //  reject(err);
    } else {
        console.log("DDD",data);
        //resolve(data);
    }
})

But i am getting this error using the code:-

EE { UnknownError: Not Found at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:48:27) }

Please Help me Out to figure out this issue.

1 Answers

Here is the solution.

Pre-requirement If you want to use the credential in aws-sdk (Manual Process) 1. Create IAM User and Assign a Cognito role to your user. 2. Generate Access Key and Secret Key for that user. 3. Use that Access Key and Secret Key in aws-sdk.

Like This,

let AWS = require("aws-sdk");
AWS.config.update({
    accessKeyId: "YOURKEY",
    secretAccessKey: "YOURSECRET",
    region: "YOURREGION"
});

Create object of CognitoIdentityServiceProvider class

const COGNITO_CLIENT = new AWS.CognitoIdentityServiceProvider({
  apiVersion: "2016-04-19",
  region: "us-east-1"
});


var poolData = {
    UserPoolId: "XXXXXXXXX",
    Username: "kurulezomi@themailpro.net",
    DesiredDeliveryMediums: ["EMAIL"],
    TemporaryPassword: "Abc@321",
    UserAttributes: [
      {
        Name: "email",
        Value: "kuri@themailpro.net"
      },
      {
        Name: "email_verified",
        Value: "true"
      }
    ]
  };
  COGNITO_CLIENT.adminCreateUser(poolData, (error, data) => {
    console.log(error);
    console.log(data);
    callback(null, {
      statusCode: 200,
      body: JSON.stringify(data)
    });
  });

Or else you can directly assign IAM Role to your EC2 Instance in that case you do not need to set credentials in AWS.config Section.

Related