Is there a way to get an user's email ID after verifying his/her Twitter identity using OAuth?

TwitterOauthTwitter Oauth

Twitter Problem Overview


I am new to OAuth and have been playing around with the Twitter API. I am able to fetch the credentials of an user after authentication by making a request to http://api.twitter.com/1/account/verify_credentials.xml. The response contains the user id, screen name etc. but not the email ID.

Is it possible at all to retrieve the email ID of the user?

Update

I believe Facebook provides this information if you specifically request for extended permissions. Is there something similar for Twitter?

Twitter Solutions


Solution 1 - Twitter

The user's email address can not be retrieved via the API. This is a deliberate design decision by the API team.

UPDATE 2015.08.18:

It is possible to request an email address from users, but it requires your app to be whitelisted. See https://dev.twitter.com/rest/reference/get/account/verify_credentials for details of the API call and this form to request whitelisting of your app.

Solution 2 - Twitter

For OutsourceFactor, which is written in Python / Django, I get the username via oAuth1, then construct an email as "[email protected]" which is guaranteed to be unique throughout twitter. Then I hash it to get a nice UUID to be used and associated with my local user account. Same thing for Yahoo. Google and Facebook use oAuth2 and they give me the email address on request which is nice.

To ensure multiple social associations with a single account, I allow social account associations ONLY after the user has locally created an account and is logged in.

So, you have to create an account first (local account), then you can use any of the social oAuth providers to ease your future logins. This is the best bang for the buck for my site.

Anyways, you get some unique form of ID from twitter. So just use it. You can ask for an email address later or before the association.

Solution 3 - Twitter

Email address is obfuscated by Twitter in their OAuth responses. Which always have been a great issue for people wanting to include a "Register with Twitter" function.

More recently (early 2015), Twitter have added email address support through a second service call, but under certain, abused, conditions.

https://dev.twitter.com/rest/reference/get/account/verify_credentials

So now it is possible, but my opinion is to continue to implement an OAuth every-provider-but-twitter single sign on. They must be boycotted until they act normally, i mean like every single other OAuth provider.

Solution 4 - Twitter

In Android using Fabric, I request the user's email address like this:

TwitterAuthClient authClient = new TwitterAuthClient();

authClient.requestEmail(session, new Callback<String>() {

    @Override
    public void success(Result<String> result) {
        // Do something with the result, which provides the email address
    }

    @Override
    public void failure(TwitterException exception) {
      // Do something on failure
    }
});

See http://docs.fabric.io/android/twitter/request-user-email-address.html

Solution 5 - Twitter

In my case every time I get the response I got a unique authentication id for every user and its same for that user every time. So I used that id to create a email like [email protected] and check if that's already on my site ( for first time it is not ) and then register the user. Then if he logins second time I just again create the email and check if its already on there. By this I don't have to make him create a local account first and can identify him to login.

Solution 6 - Twitter

Here is the example how to get twitter user email in Laravel, and on coditty.com you can find the full example using Angular+Laravel

 // get token secret from db 
        $token = TwitterTokens::where('oauth_token', $request->input('oauth_token'))->first(); 


        // open twitter connection
        $connection = new \Abraham\TwitterOAuth\TwitterOAuth(
                        $this->twitter_consumer_key, 
                        $this->twitter_secret, 
                        $request->input('oauth_token'), 
                        $token->oauth_token_secret// twitter secret from DB
                        );
    
        // get acces token
        $access_token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $request->input('oauth_verifier')]); 
       
         // new TwitterOAuth instance to get email
        $twitterOAuth = new \Abraham\TwitterOAuth\TwitterOAuth( $this->twitter_consumer_key, $this->twitter_secret, $access_token['oauth_token'], $access_token['oauth_token_secret'] );

        // Let's get the user's info with email
        $twitterUser = $twitterOAuth->get('account/verify_credentials', ['include_entities' => 'false','include_email'=>'true','skip_status'=>'true',]);


        // output user object from twitter in your Log file
        Log::info(['user'=>$twitterUser]);

Solution 7 - Twitter

> Who said it's not possible ???

I have gotten in my iOS App after whitelisting the App. Check my answer here.

Solution 8 - Twitter

Add this code!

$params = array('include_email' => 'true', 'include_entities' => 'false', 'skip_status' => 'true');

`$data = $connection->get('account/verify_credentials', $params); // get the data`

// getting twitter user profile details $twt_id = $data->id; //twitter user id $twt_email = $data->email; //twitter user email

Checkout full procedure here.

Solution 9 - Twitter

Who says you cant get users email, the “Request email addresses from users” checkbox is available under the app permissions on apps.twitter.com. Privacy Policy URL and Terms of Service URL fields must be completed in the app settings in order for email address access to function. If enabled, users will be informed via the oauth/authorize dialog that your app can access their email address.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionManoj GovindanView Question on Stackoverflow
Solution 1 - TwitterDWRoelandsView Answer on Stackoverflow
Solution 2 - Twitterun33kView Answer on Stackoverflow
Solution 3 - TwitterMoonchildView Answer on Stackoverflow
Solution 4 - TwitterPaul MuriithiView Answer on Stackoverflow
Solution 5 - TwitterMehedi HasanView Answer on Stackoverflow
Solution 6 - TwitterIgor SimicView Answer on Stackoverflow
Solution 7 - TwitterNSPratikView Answer on Stackoverflow
Solution 8 - TwitterPranView Answer on Stackoverflow
Solution 9 - TwitterEmmanuel IkechukwuView Answer on Stackoverflow