How do I retrieve the email from an X (Twitter) social login?

Hi @prioste92,

To get the email from Twitter, here is the Get Email Address from Twitter Rule that needs to be converted to a Post Login Action:

function getTwitterEmail(user, context, callback) {
  // additional request below is specific to Twitter
  if (context.connectionStrategy !== 'twitter') {
    return callback(null, user, context);
  }

  const _ = require('lodash');
  const request = require('request');
  const oauth = require('oauth-sign');
  const uuid = require('uuid');

  const url = 'https://api.twitter.com/1.1/account/verify_credentials.json';
  const consumerKey = configuration.TWITTER_CONSUMER_KEY;
  const consumerSecretKey = configuration.TWITTER_CONSUMER_SECRET_KEY;

  const twitterIdentity = _.find(user.identities, { connection: 'twitter' });
  const oauthToken = twitterIdentity.access_token;
  const oauthTokenSecret = twitterIdentity.access_token_secret;

  const timestamp = Date.now() / 1000;
  const nonce = uuid.v4().replace(/-/g, '');

  const params = {
    include_email: true,
    oauth_consumer_key: consumerKey,
    oauth_nonce: nonce,
    oauth_signature_method: 'HMAC-SHA1',
    oauth_timestamp: timestamp,
    oauth_token: oauthToken,
    oauth_version: '1.0'
  };

  params.oauth_signature = oauth.hmacsign(
    'GET',
    url,
    params,
    consumerSecretKey,
    oauthTokenSecret
  );

  const auth = Object.keys(params)
    .sort()
    .map(function (k) {
      return k + '="' + oauth.rfc3986(params[k]) + '"';
    })
    .join(', ');

  request.get(
    url + '?include_email=true',
    {
      headers: {
        Authorization: 'OAuth ' + auth
      },
      json: true
    },
    (err, resp, body) => {
      if (resp.statusCode !== 200) {
        return callback(
          new Error('Error retrieving email from twitter: ' + body || err)
        );
      }
      user.email = body.email;
      return callback(err, user, context);
    }
  );
}

During your conversion, you will need to ensure you use the Management API to get the user’s identities array to obtain the Identity Provider’s access_token and access_token_secret information as mentioned in this knowledge article.

Please also refer to our Using the Management API in Actions knowledge article.

And here is another useful resource to help you: Migrate from Rules to Actions

Thanks,
Rueben