通过Cognito管理AWS用户

4
我使用了许多AWS服务,有些很容易,而有些则有点困难。经过两天的搜索,我可以说这项服务的文档误导了我。
我的任务很简单。我想在Cognito池中更改用户属性。为了简化事情,我只需要更改一个电子邮件地址。应用程序是一个后台管理系统(Express/Node),管理员可以更改用户的电子邮件地址。
阅读和阅读后,我变得更加困惑了。显然,我熟悉的aws-sdk库有一些我可以使用的Cognito API。获取一个可行的示例来使用它们,结果成了噩梦。 然后我发现有一个library,但只能在客户端使用。经过一些调整,我在Node.js中运行了它。调整是将fetch库暴露在全局Node.js命名空间中。
我已经能够添加新用户。但是我无法更改任何属性(例如电子邮件)。库要求我提供用户名(真实用户)和密码。 我确实有一个用户名(在这种情况下是电子邮件),但我没有密码。
我需要做的就是连接到服务,并发送用户的新属性,就这样。 这是我迄今为止的代码(主要是从各处获取的黑客代码示例),但我无法使其工作:
var poolData = {
    UserPoolId : 'euXXXXXXX',
    ClientId : 'XXXXXXXXXXXX'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);

好的,以上一行代码连接到现有用户池。

现在如果我这样做:

var attributeList = [];

var dataEmail = {
    Name : 'email',
    Value : 'email@mydomain.com'
};

var dataPhoneNumber = {
    Name : 'phone_number',
    Value : '+15555555555'
};

var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber);

attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);

userPool.signUp('username', 'password', attributeList, null, function(err, result){
    if (err) {
        alert(err.message || JSON.stringify(err));
        return;
    }
    cognitoUser = result.user;
    console.log('user name is ' + cognitoUser.getUsername());
});

我可以在AWS控制台中看到用户正在被添加。太好了。
现在如何更改现有用户的属性? 所有类似thisthis的示例 建议采用以下方式:
使用案例8。更新已验证用户的用户属性。
var attributeList = [];
var attribute = {
    Name : 'nickname',
    Value : 'joe'
};
var attribute = new AmazonCognitoIdentity.CognitoUserAttribute(attribute);
attributeList.push(attribute);

cognitoUser.updateAttributes(attributeList, function(err, result) {
    if (err) {
        alert(err.message || JSON.stringify(err));
        return;
    }
    console.log('call result: ' + result);
});

这里的问题是我无法验证用户。我只知道用户的电子邮件,而不知道密码。毕竟这只是一个简单的后台程序,在这里我只需要更改用户的电子邮件。
在这种情况下我该怎么办?

你应该使用 aws-sdk 来完成这个任务。adminUpdateUserAttributes - robbannn
我得到了 "AWS.CognitoIdentityServiceProvider.adminUpdateUserAttributes 不是函数" 的错误... 你有任何想法吗? - Amiga500
我已经解决了:)。你能否写一个答案并发布吗? - Amiga500
1个回答

5

作为管理员更新Cognito用户池用户的属性,您应该使用aws-sdkCognitoIdentityServiceProvider中的adminUpdateUserAttributes函数。

let AWS = require('aws-sdk');
let cognitoISP = new AWS.CognitoIdentityServiceProvider({ region: 'your-region-here' });

function updateUserAttribute(name, value, username, userPoolId){
    return new Promise((resolve, reject) => {
        let params = {
            UserAttributes: [
                {
                    Name: name,     // name of attribute
                    Value: value    // the new attribute value
                }
            ],
            UserPoolId: userPoolId,
            Username: username
        };

        cognitoISP.adminUpdateUserAttributes(params, (err, data) => err ? reject(err) : resolve(data));
    });
}

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