Обходной путь для пользовательских атрибутов AWS Cognito?Использование JavaScript с Angular - PullRequest
0 голосов
/ 21 декабря 2018

В настоящее время пользовательские атрибуты плохо настраиваются AWS.Например, вы не можете найти настраиваемое поле, введенное вами в консоли, в пользовательских объектах, возвращаемых различными API JS SDK, если у вас нет значения в нем.(Я установил флажки чтения / записи для пользовательских атрибутов.) Для этого необходимо ввести значение с помощью интерфейса командной строки, что нереально для реальных приложений, предназначенных для добавления пользователями данных с помощью графического интерфейса.

Кроме того, API-интерфейс adminCreateUser гласит: «Для пользовательских атрибутов необходимо добавить префикс custom: к имени атрибута.»

Таким образом, очевидно, что вы должны иметь возможность добавить настраиваемое поле при созданиино удачи в этом.По крайней мере, в JavaScript я не нашел способа, чтобы он принимал пользовательский: что угодно, не нарушая сборки приложения.Я не могу найти способ использовать эти поля с любым API, потому что JS отвергает custom:

Кто-нибудь нашел обходной путь / хак для решения этой проблемы?

Это не работает в API AdminCreateUser с пользовательским: но это нормально с другими:

const createUserParams = {
          UserPoolId: this.cognitoUserPoolID,
          Username: enteredData.user_name,
          DesiredDeliveryMediums: ['EMAIL'],
          ForceAliasCreation: false,
          MessageAction: 'SUPPRESS',
          UserAttributes: [
            {
              Name: 'custom:user_id',
              Value: enteredData.custom:user_id
            },
            {
              Name: 'given_name',
              Value: enteredData.given_name
            },  ...

Вызов списка API пользователя дает сообщение об ошибке в консоли.

Error in getCognitoUsers:  Error: One or more requested attributes do not exist.

Для API listUsers требуются следующие параметры:

return new Observable(observer => {
      const listUsersParams = {
        AttributesToGet: [
          'custom:user_id',
          'given_name',
          'family_name',
          'locale',
          'email',
        ],
        // Filter: '',
        UserPoolId: this.cognitoApisService.cognitoUserPoolID
      };

      const cognitoidentityserviceprovider = new CognitoIdentityServiceProvider(AWSconfig);

      cognitoidentityserviceprovider.listUsers(listUsersParams, function (err, userData) {

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Джон Хенли решил часть проблемы с добавлением custom: к имени свойства.Я не смог найти решение для JavaScript, отклоняющего AttributesToGet: [ 'custom:user_id', так как это не требуется, я удалил AttributesToGet в своих параметрах запроса, и все атрибуты были возвращены в объекте ответа.

Поскольку JavaScript действительноне любит двоеточие в свойстве объекта. Я создал этот обходной путь:

let userID = data['custom:user_id'];

Если перебирать массив, это полезно:

const user_id = usersArray[i]['custom:user_id'];

Чтобы исправить объект ответа для доступа к данным, скажем, к таблице данных, просто добавьте новое поле и значение к объекту.

usersArray[i].user_id = usersArray[i]['custom:user_id'];

После этого просто получите доступ к свойству в точечной записи.

0 голосов
/ 25 декабря 2018

Проблема с этой строкой: Value: enteredData.custom:user_id.Проблема в том, что вы пытаетесь изменить имя переменной на строку custom:.Вместо этого вы добавляете custom: к значению имени.

{
    Name: 'custom:user_id',
    Value: enteredData.user_id
},
...