有没有办法在使用OAuth验证他/她的Twitter身份后获取用户的电子邮件ID?

时间:2010-08-30 10:41:31

标签: twitter oauth twitter-oauth

我是OAuth的新手,并且一直在玩Twitter API。通过向http://api.twitter.com/1/account/verify_credentials.xml发出请求,我可以在身份验证后获取用户的凭据。响应包含用户ID,屏幕名称等,但不包含电子邮件ID。

是否可以检索用户的电子邮件ID?

更新

如果您特别要求extended permissions,我相信Facebook会提供此信息。 Twitter有类似的东西吗?

9 个答案:

答案 0 :(得分:106)

无法通过API检索用户的电子邮件地址。这是API团队经过深思熟虑的设计决策。

更新2015.08.18:

可以向用户请求电子邮件地址,但需要将您的应用列入白名单。有关API调用的详细信息,请参阅https://dev.twitter.com/rest/reference/get/account/verify_credentials;有关您的应用的白名单请求,请参见this form

答案 1 :(得分:16)

对于OutsourceFactor,用Python / Django编写,我通过oAuth1获取用户名,然后构建一个电子邮件为“username@twitter.com”,保证在整个Twitter中都是唯一的。然后我哈希它以获得一个很好的UUID来使用并与我的本地用户帐户相关联。雅虎同样如此。谷歌和Facebook使用oAuth2,他们根据要求给我电子邮件地址很好。

为确保与单个帐户建立多个社交关联,我仅在用户本地创建帐户并登录后才允许社交帐户关联。

因此,您必须先创建一个帐户(本地帐户),然后您可以使用任何社交oAuth提供程序来简化您将来的登录。这对我的网站来说是最好的选择。

无论如何,你从twitter获得了一些独特的身份证明。所以只需使用它。您可以在关联之后或之前要求提供电子邮件地址。

答案 2 :(得分:3)

Twitter在其OAuth响应中对电子邮件地址进行了模糊处理。对于想要包含“注册Twitter”功能的人来说,这一直是一个很大的问题。

最近(2015年初),Twitter通过第二次服务电话增加了电子邮件地址支持,但是在某些受到滥用的条件下。

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

所以现在有可能,但我的意见是继续实施OAuth every-provider-but-twitter单点登录。他们必须被抵制,直到他们正常行事,我的意思是像其他每个OAuth提供者一样。

答案 3 :(得分:3)

在使用Fabric的Android中,我请求用户的电子邮件地址如下:

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
    }
});

请参阅http://docs.fabric.io/android/twitter/request-user-email-address.html

答案 4 :(得分:1)

就我而言,每次收到回复时,我都会为每个用户获得一个唯一的身份验证ID,并且每次都为该用户提供相同的身份验证ID。因此,我使用该ID创建了一个类似unique_id@twitter.com的电子邮件,并检查是否已经在我的网站上(这是第一次不是),然后注册用户。然后如果他第二次登录我再次创建电子邮件并检查它是否已经在那里。通过这个我不必让他先创建一个本地帐户,并且可以识别他登录。

答案 5 :(得分:1)

以下是如何在Laravel中获取Twitter用户电子邮件的示例,在coditty.com上您可以找到使用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]);

答案 6 :(得分:0)

  

谁说不可能???

在将应用程序列入白名单后,我已经进入了我的iOS应用程序。 检查我的回答here

答案 7 :(得分:0)

添加此代码!

foldr

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

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

结帐完整程序here

答案 8 :(得分:0)

谁说您无法收到用户的电子邮件,“{3}}上的应用权限下可以使用”向用户请求电子邮件地址“复选框。隐私政策URL和服务条款URL字段必须在应用程序设置中完成,以便电子邮件地址访问功能。如果启用,系统会通过apps.twitter.com对话框通知用户您的应用可以访问其电子邮件地址。