Управление пользователями AWS через Cognito - PullRequest
0 голосов
/ 16 ноября 2018

Я использовал много сервисов от AWS, некоторые из них были простыми, а некоторые были немного сложными.После 2 дней поиска по всему, я могу сказать, что документация для этой службы вводит в заблуждение.

У меня есть простая задача.Я хочу изменить атрибут пользователя в пуле Cognito.И чтобы упростить задачу, мне просто нужно изменить адрес электронной почты, и это все.Приложение представляет собой Backoffice (Express / Node), где администраторы могут изменять электронную почту пользователя.

После чтения и чтения я все больше путаюсь.Судя по всему, у библиотеки aws-sdk, с которой я знаком, есть некоторые Cognito API, которые я мог бы использовать.Получение рабочего примера о том, как их использовать, оказалось кошмаром.Затем я обнаружил, что есть библиотека , но только для использования на стороне клиента.После некоторых настроек я запустил его в Node.js.Трюк состоял в том, чтобы открыть библиотеку fetch в глобальном пространстве имен Node.js.

Мне удалось добавить нового пользователя.Но, несмотря на все мои намерения, я не могу изменить какие-либо атрибуты (например, электронную почту).Библиотека хочет, чтобы я указал имя пользователя (реального пользователя) и пароль.У меня есть имя пользователя (в данном случае электронное письмо), но у меня нет пароля.

Все, что мне нужно сделать, это подключиться к службе и отправить новый атрибут для пользователя, и это все,Это то, что у меня есть (в основном взломанные примеры кода из разных мест), и я не могу заставить его работать:

var poolData = {
    UserPoolId : 'euXXXXXXX',
    ClientId : 'XXXXXXXXXXXX'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);

Ok. Приведенная выше строка устанавливает соединение с существующим пулом пользователей.

Теперь, если бы я сделал это:

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 я вижу, что добавляется пользователь.Отлично.

Теперь, как изменить атрибуты существующего пользователя?Все примеры, такие как this и this Предложите следующее:

Вариант использования 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);
});

Проблема в том, что я не могу аутентифицировать пользователя.Я не могу знать пароль пользователя, только его адрес электронной почты.В конце концов, это простая программа Backoffice, где мне просто нужно изменить электронную почту пользователей.

Что я могу сделать в этом случае?

1 Ответ

0 голосов
/ 16 ноября 2018

Чтобы обновить атрибуты пользователя Cognito User Pool как администратора, вы должны использовать функцию adminUpdateUserAttributes из aws-sdk класса CognitoIdentityServiceProvider.

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));
    });
}
...