AWS Cognito AdminGetUser возвращает неопределенный объект - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь настроить просмотр страницы пользовательских атрибутов для администраторов сайта, чтобы они могли просматривать и устанавливать различные пользовательские переменные. Когда я делаю запрос в свой пул пользователей, а не возвращаю объект пользователя или объект ошибки HTTP, я получаю следующую ошибку:

TypeError: Cannot read property 'byteLength' of undefined
    at Object.isEmptyData (browserHashUtils.js?a069:41)
    at Hmac.update (browserHmac.js?f8e2:34)
    at Object.hmac (util.js?05a3:423)
    at Object.getSigningKey (v4_credentials.js?146b:62)
    at V4.signature (v4.js?2886:98)
    at V4.authorization (v4.js?2886:93)
    at V4.addAuthorization (v4.js?2886:35)
    at eval (event_listeners.js?b7ab:236)
    at finish (config.js?6e76:379)
    at eval (config.js?6e76:397) "TypeError: Cannot read property 'byteLength' of undefined
    at Object.isEmptyData (webpack-internal:///./node_modules/aws-sdk/lib/browserHashUtils.js:41:17)
    at Hmac.update (webpack-internal:///./node_modules/aws-sdk/lib/browserHmac.js:34:19)
    at Object.hmac (webpack-internal:///./node_modules/aws-sdk/lib/util.js:423:50)
    at Object.getSigningKey (webpack-internal:///./node_modules/aws-sdk/lib/signers/v4_credentials.js:62:8)
    at V4.signature (webpack-internal:///./node_modules/aws-sdk/lib/signers/v4.js:98:36)
    at V4.authorization (webpack-internal:///./node_modules/aws-sdk/lib/signers/v4.js:93:36)
    at V4.addAuthorization (webpack-internal:///./node_modules/aws-sdk/lib/signers/v4.js:35:12)
    at eval (webpack-internal:///./node_modules/aws-sdk/lib/event_listeners.js:236:18)
    at finish (webpack-internal:///./node_modules/aws-sdk/lib/config.js:379:7)
    at eval (webpack-internal:///./node_modules/aws-sdk/lib/config.js:397:9)"

Теперь, очевидно, он возвращает нулевой объект. Я хочу знать, почему он возвращает null вместо любой другой ошибки, такой как 'UserNotFound' или любой другой ошибки 400, найденной здесь , но вместо этого пустой объект. Кажется, что-то не так с тем, что я передаю, однако независимо от параметров, подключенных к AdminGetUser, так как это одно и то же, независимо от того, являются ли значения допустимыми, однако если их пропустить, выдается ошибка 400.

Мой текущий код выглядит следующим образом:

import  AWS  from 'aws-sdk'
        AWS.config.region = 'us-west-2'; // Region
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: 'us-west-2:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
        });
        AWS.config.accessKeyId = "xxxxxxxxxxxxxxxxxx"
        AWS.config.secretAccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
        var params = {
          Username: 'xxxxxxxxx',
          UserPoolId: 'us-west-xxxxxxxx'
        }
        cognitoidentityserviceprovider.adminGetUser(params, function(err,data){
          if(err) console.log( err, err.stack);
          else    {
            console.log(data)
          };
        });

На данный момент у меня есть:

  • Обновлен модуль aws-sdk
  • , обеспечивающий ключи доступа и секретный доступ ключи были действительны при генерации новых и копирование + вставка
  • гарантировали, что идентификатор пула идентификаторов, идентификатор пула пользователей и регион были точными
  • проверено, чтобы попытаться получить ОШИБКУ 400: Пользователь не найден путем замены действительное имя пользователя для недопустимого имени пользователя с тем же эффектом
  • сделал то же самое, что и выше, с идентификатором пула пользователей in / valid с тем же эффектом
  • протестировал команду в AWS CLI как aws cognito-idp --user-pool-id id iiusername validusername и получил правильный ответ

Кто-нибудь сталкивался с тем же, и как вы это исправили?

1 Ответ

0 голосов
/ 20 апреля 2020

Причина была в том, что я обновлял только AWS .config, что означало, что AWS .config.credentials.accessKeyId и AWS .config.credentials.secretAccessKey не определены. Когда Admin API попытался прочитать их, он выдал «undefined», потому что просто не было никаких данных. Добавляя в те же поля те же значения, что и их AWS .config, я получаю свои данные.

async adminGetUser(_, {username}){
        AWS.config.region = 'us-west-2'; // Region
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: 'us-west-2:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
        });
        AWS.config.accessKeyId = "xxxxxxxxxxxxxxxxxxx"
        AWS.config.secretAccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        AWS.config.credentials.accessKeyId = "xxxxxxxxxxxxxxxxxx"
        AWS.config.credentials.secretAccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        AWS.config.apiVersion = 'latest'
        AWS.config.maxRetries = 100
        var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
        var params = {
          Username: username,
          UserPoolId: 'us-west-xxxxxxxxx'
        }
        cognitoidentityserviceprovider.adminGetUser(params, function(err,data){
          if(err) console.log( err, err.stack);
          else    {
            console.log(data)
            return data
          };
        });

    },

Функция, из которой она вызывается:

let params = {
            username: this.USERNAME
        }
        console.log("getting user")
        let user = await this.$store.dispatch('adminGetUser', params);
        console.log(user)

И вывод:

getting user

undefined

{userdata}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...