Last active
November 28, 2018 21:12
-
-
Save SeptiyanAndika/251f49dd69eb5d42ebb7a993384ae878 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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