AWS Cognito AdminLinkProviderForUser - учетная запись пула пользователей и Facebook - PullRequest
0 голосов
/ 12 ноября 2019

Наша настройка:

  • Создание учетной записи электронной почты / пароля или вход в Facebook

Я могу успешно создавать обе записи независимо друг от друга с помощью AWS Cognito.

Проблема, которую я хочу решить, заключается в том, что если у пользователя сначала есть учетная запись электронной почты / пароль, и он нажимает кнопку «Вход в Facebook», я хочу, чтобы он связал и попросил пользователя подтвердить, что у него есть доступ к учетной записи электронной почты / пароль.

Как только пользователь подтвердит, что в дальнейшем он должен иметь возможность войти в Facebook или войти по электронной почте / паролю для доступа и настройки той же учетной записи.

Пользователь Facebook в Cognito User Pool: - Пользователь Facebook в пуле пользователей Cognito

Пользователь электронной почты / пароль, связанный в пуле пользователей Cognito с пользователем Facebook: Пользователь электронной почты / пароль, связанный в пуле пользователей Cognito с пользователем Facebook

В настоящее время я использую триггер предварительной регистрации для автоматической проверки электронной почты, подтверждения и привязки учетной записи. Для Social (Facebook) я использую:

GET amazoncognito.com/oauth2/authorize?identity_provider=Facebook&response_type=code then

POST amazoncognito.com/oauth2/token

Это работает, но я аутентифицируюсь как пользователь Facebook_ , и я ожидаю (и хочу) аутентифицироваться как пользователь ссылки наэтот момент. Я чувствую, что упускаю что-то очевидное.

1 Ответ

0 голосов
/ 12 ноября 2019

В конечном итоге ответом было то, что я не удалял Facebook_ из идентификатора пользователя. Таким образом, я теоретически связывал свою электронную почту / пароль Cognito с «Facebook_USERID», а не «USERID».

Как только я внес это изменение, я смог аутентифицироваться как 1 связанный аккаунт.

// Get Email
        var params = {
          UserPoolId: 'YOUR_USER_POOL',
          AttributesToGet: ['sub','email'],
          Filter: "email = \"" + event.request.userAttributes.email + "\""
        }
        cognito.listUsers(params, (err, data) => {
            if (err) {
                console.log(err, err.stack);
            }
            else {
                console.log(data);
                console.log(event.userName);
                if(data != null && data.Users != null && data.Users[0] != null)
                {
                  console.log(data.Users[0].Username);
                  var params = {
                    DestinationUser: { 
                      ProviderAttributeValue: data.Users[0].Username,
                      ProviderName: 'Cognito'
                    },
                    SourceUser: { 
                      ProviderAttributeName: 'Cognito_Subject',
                      ProviderAttributeValue: event.userName.split("_")[1],
                      ProviderName: 'Facebook'
                    },
                    UserPoolId: 'YOUR_USER_POOL'
                  };
                  cognito.adminLinkProviderForUser(params, function(err, data) {
                    if (err) console.log(err, err.stack); // an error occurred
                    else     console.log(data);           // successful response
                  });
                }
            }
        });
...