私はこれを以下のコードで試しましたが、正常に機能しています。ただし、これらのサインアップの詳細をユーザープール内に保存する必要があります(さらに、いくつかのカスタム属性も追加したい)。しかし、私はこれを行うための適切な方法を見つけられませんでした。
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>
ここに保存したいです。
コードスニペットに従って、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トークンを販売します。また、ユーザープールで正しい 属性マッピング を指定していることを確認してください。