Skip to content

Instantly share code, notes, and snippets.

@SeptiyanAndika
Last active November 28, 2018 21:12
Show Gist options
  • Save SeptiyanAndika/251f49dd69eb5d42ebb7a993384ae878 to your computer and use it in GitHub Desktop.
Save SeptiyanAndika/251f49dd69eb5d42ebb7a993384ae878 to your computer and use it in GitHub Desktop.
exports.handler = (event, context, callback) => {
var AWS = require('aws-sdk');
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
console.log(event);
if (event.request.userAttributes.hasOwnProperty("email")) {
var email_filter = {
"AttributesToGet": null,
"Filter": "email=\"" + event.request.userAttributes.email + "\"",
"UserPoolId": event.userPoolId
};
// get cognito data by email filter,
cognitoidentityserviceprovider.listUsers(email_filter, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else {
// if no existed user found, sign up normally
if (!data.Users || data.Users.length == 0) {
return callback(null, event);
}
// we merge and no sign up, but how to sign user in?
var targetIdentitiesContainer = data.Users[0].Attributes.filter( (attr) => {
return attr.Name == 'identities';
});
var identities = JSON.parse(targetIdentitiesContainer[0].Value);
var targetUserId = identities[0].userId;
var targetProviderName = identities[0].providerName;
mergeUserTo({id: targetUserId, provider: targetProviderName} (err, data) =>{
return callback(err,event)
});
}
});
}else{
// Return to Amazon Cognito
// default behavior
callback(null, event);
}
};
//*/
function mergeUserTo (target,cb) {
var params = {
DestinationUser: { /* required */
ProviderAttributeValue: target.id, // target.id or target.userName
ProviderName: target.provider
},
SourceUser: { /* required */
ProviderAttributeName: 'Cognito_Subject',
ProviderAttributeValue: event.userName.split('_')[1],
ProviderName: event.userName.split('_')[0]
},
UserPoolId: event.userPoolId
};
console.log(params);
cognitoidentityserviceprovider.adminLinkProviderForUser(params, (err, data) => {
cb(err,data)
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment