85

我是 OAuth 新手,一直在玩 Twitter API。我可以通过向http://api.twitter.com/1/account/verify_credentials.xml. 响应包含用户 ID、屏幕名称等,但不包含电子邮件 ID。

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

更新

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

4

9 回答 9

106

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

更新 2015.08.18:

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

于 2010-09-02T13:31:09.163 回答
16

对于用 Python / Django 编写的OutsourceFactor,我通过 oAuth1 获取用户名,然后将电子邮件构造为“username@twitter.com”,保证在整个 Twitter 中是唯一的。然后我对它进行哈希处理以获得一个不错的 UUID,以便使用并与我的本地用户帐户相关联。雅虎也是如此。Google 和 Facebook 使用 oAuth2,他们会根据要求给我电子邮件地址,这很好。

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

因此,您必须首先创建一个帐户(本地帐户),然后您可以使用任何社交 oAuth 提供商来简化您未来的登录。对于我的网站来说,这是物超所值的最佳选择。

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

于 2012-06-25T19:05:20.627 回答
3

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

最近(2015 年初),Twitter 通过第二次服务呼叫增加了电子邮件地址支持,但在某些被滥用的情况下。

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

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

于 2015-05-29T14:36:56.273 回答
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

于 2015-07-10T09:09:23.643 回答
1

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

于 2016-03-29T12:48:31.410 回答
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]);
于 2016-12-04T13:17:18.953 回答
0

谁说不可能???

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

于 2015-06-04T07:11:53.553 回答
0

添加此代码!

$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

在这里结帐完整程序

于 2016-11-17T08:22:03.257 回答
0

谁说您无法获取用户电子邮件,“向用户请求电子邮件地址”复选框在apps.twitter.com上的应用权限下可用。必须在应用程序设置中填写隐私政策 URL 和服务条款 URL 字段,电子邮件地址才能正常访问。如果启用,将通过oauth/authorize对话框通知用户您的应用可以访问他们的电子邮件地址。

于 2017-01-21T10:09:06.920 回答