AWS Cognito使用Node.js创建管理员用户

4
我正在使用JavaScript SDK amazon-cognito-identity-js,试图在Node.js中创建Cognito用户,但是出现了错误。以下是我的代码:
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);
    }
})

但是,使用该代码我遇到了以下错误:

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

请帮我解决这个问题。

请在控制台上尝试运行以下命令:"npm i aws-sdk"。 - Atiq Ur Rehman
同样的问题没有改变。 - Aditya
只需查看此错误,可能您正在遇到相同的问题。https://stackoverflow.com/questions/38411915/aws-sdk-putobject-access-denied-request-extracterror根据AWS论坛答案,这似乎是端点配置问题。 https://forums.aws.amazon.com/message.jspa?messageID=804631 - Asad Mehmood
3个回答

7

以下是解决方案。

前提条件 如果您想在aws-sdk中使用凭据(手动过程) 1. 创建IAM用户并为用户分配Cognito角色。 2. 为该用户生成访问密钥和秘密密钥。 3. 在aws-sdk中使用该访问密钥和秘密密钥。

像这样,

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

创建 CognitoIdentityServiceProvider 类的对象。
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)
    });
  });

您还可以直接将 IAM 角色分配给您的 EC2 实例,在这种情况下,您无需在 AWS.config 部分设置凭据。


1
文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#adminCreateUser-property - bbeecher

0

关于此Node.js示例:该示例与AWS SDK for JavaScript版本2(v2)一起使用。

目的: admin-create-user.js演示了管理员如何使用Amazon Cognito创建用户。

输入:

  • USERPOOLID
  • EMAIL

AWS配置

const AWS = require("aws-sdk");

AWS.config.update({
  accessKeyId : "Your accessKeyId ",
  secretAccessKey: "secretAccessKey",
});

创建 COGNITO_CLIENT

const COGNITO_CLIENT = new AWS.CognitoIdentityServiceProvider({
  apiVersion: "2022-10-03",
  region: "us-east-1",
});

创建用户

const createUser = async (user) => {
  try {
    const { emailId, password } = user;
    const cognitoParams = {
      UserPoolId: userPoolId,
      Username: emailId,
      UserAttributes: [
        {
          Name: "email",
          Value: emailId,
        },
        {
          Name: "email_verified",
          Value: "true",
        },
      ],
      TemporaryPassword: password || "Password@123456789",
    };

    console.log(cognitoParams.TemporaryPassword);

    let response = await COGNITO_CLIENT.adminCreateUser(
      cognitoParams
    ).promise();
    console.log(JSON.stringify(response));
    return "user created";
  } catch (err) {
    throw Error(err);
  }
};

0
对于AWS SDK v3ES6
安装
npm install @aws-sdk/client-cognito-identity-provider --save

导入模块
import { CognitoIdentityProviderClient, AdminCreateUserCommand } from "@aws-sdk/client-cognito-identity-provider";

创建客户端
const cognitoClient = new CognitoIdentityProviderClient({ region: 'eu-west-1' });

创建用户
const command = new AdminCreateUserCommand({
      UserPoolId: USER_POOL_ID,
      Username: EMAIL_ADDRESS,
      DesiredDeliveryMediums: ['EMAIL'],
      TemporaryPassword: TEMPORARY_PASSWORD
    });

let response = await cognitoClient.send(command);

请注意,您需要具有权限才能使此功能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接