it-swarm.cn

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

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

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

更新

我相信如果您特别要求 扩展权限 Facebook提供此信息。 Twitter有类似的东西吗?

85
Manoj Govindan

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

更新2015.08.18: /

可以向用户请求电子邮件地址,但需要将您的应用列入白名单。请参阅 https://dev.Twitter.com/rest/reference/get/account/verify_credentials 了解API调用和 此表单的详细信息 请求将应用程序列入白名单。

106
DWRoelands

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

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

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

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

16
un33k

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

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

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

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

3
Moonchild

在使用 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

3
Paul Muriithi

在我的情况下,每次收到响应时,我都会为每个用户获得一个唯一的身份验证ID,每次都为该用户提供相同的身份验证ID。所以我使用该id创建了一个类似[email protected]的电子邮件,并检查是否已经在我的网站上(这是第一次不是),然后注册用户。然后如果他第二次登录我再次创建电子邮件并检查它是否已经在那里。通过这个我不必让他先创建一个本地帐户,并可以识别他登录。

1
Mehedi Hasan

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

添加此代码!

$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

签出完整程序 这里

0
Pran

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

0
Emmanuel Ikechukwu

谁说这不可能???

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

0
NSPratik