我是 OAuth 新手,一直在玩 Twitter API。我可以通过向http://api.twitter.com/1/account/verify_credentials.xml
. 响应包含用户 ID、屏幕名称等,但不包含电子邮件 ID。
是否有可能检索用户的电子邮件 ID?
更新
如果您特别请求扩展权限,我相信 Facebook 会提供此信息。Twitter有类似的东西吗?
我是 OAuth 新手,一直在玩 Twitter API。我可以通过向http://api.twitter.com/1/account/verify_credentials.xml
. 响应包含用户 ID、屏幕名称等,但不包含电子邮件 ID。
是否有可能检索用户的电子邮件 ID?
更新
如果您特别请求扩展权限,我相信 Facebook 会提供此信息。Twitter有类似的东西吗?
无法通过 API 检索用户的电子邮件地址。这是 API 团队深思熟虑的设计决定。
更新 2015.08.18:
可以向用户请求电子邮件地址,但这需要将您的应用列入白名单。有关 API 调用的详细信息,请参阅https://dev.twitter.com/rest/reference/get/account/verify_credentials以及此表单以请求将您的应用列入白名单。
对于用 Python / Django 编写的OutsourceFactor,我通过 oAuth1 获取用户名,然后将电子邮件构造为“username@twitter.com”,保证在整个 Twitter 中是唯一的。然后我对它进行哈希处理以获得一个不错的 UUID,以便使用并与我的本地用户帐户相关联。雅虎也是如此。Google 和 Facebook 使用 oAuth2,他们会根据要求给我电子邮件地址,这很好。
为确保单个帐户具有多个社交关联,我仅在用户在本地创建帐户并登录后才允许社交帐户关联。
因此,您必须首先创建一个帐户(本地帐户),然后您可以使用任何社交 oAuth 提供商来简化您未来的登录。对于我的网站来说,这是物超所值的最佳选择。
无论如何,你会从 twitter 获得一些独特形式的 ID。所以就用它吧。您可以在关联之后或之前要求提供电子邮件地址。
Twitter 在其 OAuth 响应中混淆了电子邮件地址。对于想要包含“在 Twitter 上注册”功能的人来说,这一直是个大问题。
最近(2015 年初),Twitter 通过第二次服务呼叫增加了电子邮件地址支持,但在某些被滥用的情况下。
https://dev.twitter.com/rest/reference/get/account/verify_credentials
所以现在有可能,但我的意见是继续实施 OAuth every-provider-but-twitter 单点登录。必须抵制它们,直到它们正常运行,我的意思是,就像其他所有 OAuth 提供者一样。
在使用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
在我的情况下,每次我收到响应时,我都会为每个用户获得一个唯一的身份验证 ID,并且每次都为该用户获得相同的身份验证 ID。因此,我使用该 ID 创建了一个类似 unique_id@twitter.com 的电子邮件,并检查它是否已经在我的网站上(第一次不是),然后注册用户。然后,如果他第二次登录,我只需再次创建电子邮件并检查它是否已经存在。这样我就不必让他先创建一个本地帐户,并且可以识别他进行登录。
这是如何在 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]);
谁说不可能???
将应用程序列入白名单后,我已进入我的 iOS 应用程序。在这里检查我的答案。
添加此代码!
$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
在这里结帐完整程序。
谁说您无法获取用户电子邮件,“向用户请求电子邮件地址”复选框在apps.twitter.com上的应用权限下可用。必须在应用程序设置中填写隐私政策 URL 和服务条款 URL 字段,电子邮件地址才能正常访问。如果启用,将通过oauth/authorize对话框通知用户您的应用可以访问他们的电子邮件地址。