Guest User

Link Accounts with Same Email Address while Merging Metadata

a guest
Jun 14th, 2017
947
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function (user, context, callback) {
  2.   var request = require('request@2.56.0');
  3.   var async = require('async@2.1.2');
  4.  
  5.   // Check if email is verified, we shouldn't automatically
  6.   // merge accounts if this is not the case.
  7.   if (!user.email_verified) {
  8.     return callback(null, user, context);
  9.   }
  10.   var userApiUrl = auth0.baseUrl + '/users';
  11.  
  12.   request({
  13.    url: userApiUrl,
  14.    headers: {
  15.      Authorization: 'Bearer ' + auth0.accessToken
  16.    },
  17.    qs: {
  18.      search_engine: 'v2',
  19.      q: 'email.raw:"' + user.email + '" -user_id:"' + user.user_id + '"',
  20.    }
  21.   },
  22.   function(err, response, body) {
  23.     if (err) return callback(err);
  24.     if (response.statusCode !== 200) return callback(new Error(body));
  25.  
  26.     var data = JSON.parse(body);
  27.     if (data.length > 0) {
  28.       async.each(data, function(targetUser, cb) {
  29.         if (targetUser.email_verified) {
  30.           var aryTmp = targetUser.user_id.split('|');
  31.           var provider = aryTmp[0];
  32.           var targetUserId = aryTmp[1];
  33.  
  34.           targetUser.app_metadata = targetUser.app_metadata || {};
  35.           targetUser.user_metadata = targetUser.user_metadata || {};
  36.           auth0.users.updateAppMetadata(user.user_id, targetUser.app_metadata)
  37.           .then(auth0.users.updateUserMetadata(user.user_id, targetUser.user_metadata))
  38.           .then(function(){
  39.             request.post({
  40.               url: userApiUrl + '/' + user.user_id + '/identities',
  41.               headers: {
  42.                 Authorization: 'Bearer ' + auth0.accessToken
  43.               },
  44.               json: { provider: provider, user_id: targetUserId }
  45.             }, function(err, response, body) {
  46.                 if (response && response.statusCode >= 400) {
  47.                   return cb(new Error('Error linking account: ' + response.statusMessage));
  48.                 }
  49.                 cb(err);
  50.             });
  51.           })
  52.           .catch(function(err){
  53.             cb(err);
  54.           });
  55.         } else {
  56.           cb();
  57.         }
  58.       }, function(err) {
  59.         callback(err, user, context);
  60.       });
  61.     } else {
  62.       callback(null, user, context);
  63.     }
  64.   });
  65. }
Add Comment
Please, Sign In to add comment