UserPool.getCurrentUser () возвращает null [backend] - PullRequest
0 голосов
/ 05 января 2019

Пытаюсь установить федеративную идентификацию, чтобы получить учетные данные для идентификации. Но когда я пытаюсь сделать, getCurrentUser () получает ответ как ноль. И еще одна вещь об этом, я пытаюсь это на серверной стороне . Так будет ли работать в бэкэнде? И почему я получаю нулевой ответ при попытке getCurrentUser ?? Есть идеи?

var data = {
    UserPoolId: userPoolId,
    ClientId: appClientId,
  };

var userPool = new AmazonCognitoIdentity.CognitoUserPool(data);
console.log(userPool);
var cognitoUser = userPool.getCurrentUser();
console.log(cognitoUser);

Ответ журнала userPool равен

CognitoUserPool {
    userPoolId: 'us-east-6_hxxxx2U',
    clientId: '`6heh4h8h848h4884h05',
    client:
     Client {
       endpoint: 'https://cognito-idp.us-east-1.amazonaws.com/',
       userAgent: 'aws-amplify/0.1.x js' },
    advancedSecurityDataCollectionFlag: true,
    storage:
     { [Function: MemoryStorage]
       setItem: [Function: setItem],
       getItem: [Function: getItem],
       removeItem: [Function: removeItem],
       clear: [Function: clear] } }

Ответ журнала cognitoUser - NULL

Так почему же ответ нулевой, а в качестве входных данных даются правильные значения?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Это потому, что код, который я разместил здесь, предназначен для внешнего интерфейса. Есть статья https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html, в которой четко сказано, как мы должны пытаться аутентифицировать пользователя.

Таким образом, после правильного потока аутентификации мы передадим необходимые данные, используя cognitoidentity.getCredentialsForIdentity() [см. Официальный документ SDK]

0 голосов
/ 05 января 2019

Есть несколько возможных причин:

  1. Используйте getCurrentUser() вместо getCurrentUser(Data)
  2. Если вы не выполнили вход в систему на бэкэнде, получить текущего пользователя было бы невозможно. Если пользователи вошли в интерфейс, вы можете использовать функцию для отправки id_token пользователя в бэкэнд и использовать его для входа в систему из бэкэнда.

О втором пункте:

id_token содержит часть, называемую полезной нагрузкой, которая содержит имя пользователя и другие атрибуты. Для деталей: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html#amazon-cognito-user-pools-using-the-id-token

Когда вы используете id_token, вы должны проверить подпись, прежде чем разрешить дальнейшие действия для пользователя. Коды для проверки можно найти в https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt И вы можете добавить свой код для действий здесь:

                    .....
                    // and the Audience (use claims.client_id if verifying an access token)

                    if (claims.aud != app_client_id) {

                        callback('Token was not issued for this audience');

                    }

                    //add your code here

                    callback(null, claims);

                }).

                catch(function() {

                    callback('Signature verification failed');

                });

А пользовательская информация должна быть в claims.

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