web-dev-qa-db-ja.com

AWS Cognito + googleサインアップ

私はこれを以下のコードで試しましたが、正常に機能しています。ただし、これらのサインアップの詳細をユーザープール内に保存する必要があります(さらに、いくつかのカスタム属性も追加したい)。しかし、私はこれを行うための適切な方法を見つけられませんでした。

function signinCallback(authResult) {
                        AWS.config.region = 'us-XXXXXXX-1';
            // Add the Google access token to the Cognito credentials login map.
            AWS.config.credentials = new AWS.CognitoIdentityCredentials({
                IdentityPoolId: 'us-XXXX-1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
                RoleArn: 'arn:aws:iam::XXXXXXXX:role/Cognito_XXXXXXXXXUnauth_Role',
                Logins: {
                    'accounts.google.com': authResult['id_token']
                }
            });

            // Obtain AWS credentials
            AWS.config.credentials.get(function (err) {
                alert(err);
                if (err) {
                    console.log(err);
                } else {
                    //client = new AWS.CognitoSyncManager();
                    console.log(AWS.config.credentials);
                    console.log("Cognito Identity Id: " + AWS.config.credentials.identityId);
                                        }});
                                        
                                        }
<span class="g-signin" data-callback="signinCallback" data-clientid="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXX.apps.googleusercontent.com"
   data-cookiepolicy="single_Host_Origin" data-requestvisibleactions="http://schemas.google.com/AddActivity"
    data-scope="https://www.googleapis.com/auth/plus.login">
</span>

ここに保存したいです。

enter image description here

6
mugzi

コードスニペットに従って、Cognito Federated Identities(つまり、IDプール)を使用し、ログインマップにGoogleトークンを追加しています。フェデレーションIDでは、CognitoユーザープールはGoogleのような別のIDプロバイダー(IdP)であるため、これによってGoogleユーザーがCognitoユーザープールに追加されることはありません。ユーザープールに新しいユーザーを登録しても新しいGoogleまたはFacebookアカウントが作成されないのと同様に、Googleトークンを追加しても新しいユーザープールユーザーは作成されません。つまり、Cognito UserpoolはIdentityPoolとは別のものであり、IdentityPoolでのアクティビティ(ログインマップにGoogleトークンを追加するなど)は影響しません。

Googleユーザーをユーザープールに自動的に追加したい場合は、そうする方法があります。 GoogleをIDプロバイダーとして をユーザープールに直接追加する必要がありますCognitoを使用します ログイン用の組み込み (つまりホストされている)UI。この後、すべてのGoogleログインが自動的に、ユーザープールに新しいユーザーを作成します。ここで、ユーザープールをIDプールに追加するだけです。つまり、IDプールからGoogleを削除します。ログインマップでは、常にCognitoトークンを使用します。 Googleを使用して(ホストされたUIを介して)ログインする場合でも、Googleトークンはユーザープールに直接送信され、Cognitoトークンを販売します。また、ユーザープールで正しい 属性マッピング を指定していることを確認してください。

5
agent420