我在下面的代码中尝试了这个,它运行正常。但是我需要在用户池中存储这些注册详细信息(另外我还想添加一些自定义属性)。但我找不到合适的方法来做到这一点。
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>
我想在这里保存。
答案 0 :(得分:5)
根据您的代码段,您使用的是Cognito联合身份(即身份池)并将Google令牌添加到登录地图中。这不会将Google用户添加到您的Cognito Userpool,因为在联合身份验证中,Cognito Userpool只是Google之类的另一个身份提供商(IdP)。就像在您的用户池中注册新用户不会创建新的Google或Facebook帐户一样,同样添加Google令牌也不会创建新的Userpool用户。简而言之,Cognito Userpool与IdentityPool是分开的,IdentityPool中的活动(如在登录地图中添加Google令牌)不会影响它。
如果您想自动将Google用户添加到您的用户池,有一种方法可以执行此操作。您需要直接向用户池添加Google as an Identity Provider &amp; 使用Cognito的built-in(即托管)用户界面进行登录。在此之后,所有Google登录都会自动在Userpool中创建新用户。现在,只需将您的用户池添加到您的身份池,即从您的身份池中删除Google。在您的登录地图中,您将始终使用Cognito令牌。即使您使用Google登录(通过托管用户界面),Google令牌也会直接发送到用户广告系列,然后会出售Cognito令牌。另外,请确保在用户池中指定正确的attribute mappings。