我是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有类似的东西吗?
Answers:
无法通过API检索用户的电子邮件地址。这是API团队的故意设计决定。
更新2015.08.18:
可以向用户请求电子邮件地址,但这需要将您的应用列入白名单。请参阅https://dev.twitter.com/rest/reference/get/account/verify_credentials,以获取API调用的详细信息以及此表格以请求将您的应用列入白名单。
对于使用Python / Django编写的OutsourceFactor,我通过oAuth1获取用户名,然后将电子邮件构造为“ username@twitter.com”,该电子邮件在Twitter上将是唯一的。然后,我对它进行哈希处理以获得一个不错的UUID,该UUID可以使用并与我的本地用户帐户关联。雅虎也一样。Google和Facebook使用oAuth2,他们可以根据要求给我电子邮件地址,这很好。
为确保单个帐户具有多个社交关联,我仅在用户本地创建一个帐户并登录后才允许社交帐户关联。
因此,您必须先创建一个帐户(本地帐户),然后才能使用任何社交oAuth提供程序来简化以后的登录。对于我的网站来说,这是最好的选择。
无论如何,您会从Twitter获得一些独特的ID形式。因此,只需使用它。您可以在关联之后或之前请求电子邮件地址。
Twitter在OAuth响应中混淆了电子邮件地址。对于希望包括“向Twitter注册”功能的人们来说,这一直是一个大问题。
最近(2015年初),Twitter通过第二次服务电话增加了电子邮件地址支持,但在某些情况下会受到滥用。
https://dev.twitter.com/rest/reference/get/account/verify_credentials
因此,现在有可能,但我的意见是继续实施OAuth的“每个提供商都可以推特”的单点登录。必须抵制它们,直到它们正常运行为止,我的意思是像其他每个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]);
添加此代码!
$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对话框通知用户您的应用程序可以访问其电子邮件地址。