在使用OAuthvalidation他/她的Twitter身份之后,有没有办法获取用户的电子邮件ID?
我是OAuth的新手,一直在玩Twitter API。 通过向http://api.twitter.com/1/account/verify_credentials.xml
发出请求,我可以在身份validation后获取用户的凭据。 响应包含用户ID,屏幕名称等,但不包含电子邮件ID。
是否有可能检索用户的电子邮件ID?
更新
我相信Facebook提供这个信息,如果你特别要求扩展权限 。 有什么类似的Twitter?
用户的电子邮件地址不能通过API检索。 这是由API小组进行的有意devise决定。
更新2015.08.18:
可以向用户请求电子邮件地址,但需要将您的应用列入白名单。 有关API调用的详细信息,请参阅https://dev.twitter.com/rest/reference/get/account/verify_credentials ,并在此表单中请求将您的应用列入白名单。
对于使用Python / Django编写的OutsourceFactor ,我通过oAuth1获取用户名,然后构build一个名为“username@twitter.com”的电子邮件,该电子邮件在整个Twitter中保证是唯一的。 然后我哈希它得到一个很好的UUID被使用,并与我的本地用户帐户相关联。 雅虎也一样。 谷歌和Facebook使用oAuth2,他们给我的电子邮件地址的要求是很好的。
为了确保与单个帐户的多个社交关联,只有在用户在本地创build帐户并login后,我才允许社交帐户关联。
所以,您必须先创build一个帐户(本地帐户),然后您可以使用任何社交OAuth提供程序来减轻您未来的login。 这是为我的网站降压最好的爆炸。
无论如何,你从Twitter获得一些独特的身份证件。 所以就用它吧 您可以稍后或在协会之前要求提供电子邮件地址。
电子邮件地址在Twitter的OAuth响应中被模糊处理。 对于希望包含“注册Twitter”function的人来说,这一直是一个很大的问题。
最近(2015年初),Twitter通过第二次服务电话增加了电子邮件地址支持,但是在某些情况下被滥用。
https://dev.twitter.com/rest/reference/get/account/verify_credentials
所以现在有可能,但我的意见是继续实施OAuth每个提供商,但叽叽喳喳的单一login。 他们必须抵制,直到他们正常行事,我的意思是像每个其他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
谁说这是不可能的?
白名单后,我已经在我的iOS应用程序。 在这里检查我的答案。
在我的情况下,每次得到响应时,我都会为每个用户获得一个唯一的身份validationID,并且每次都为该用户提供相同的身份验 所以我用这个id来创build一个像unique_id@twitter.com这样的电子邮件,并检查这个电子邮件是否已经在我的网站上(第一次不是),然后注册用户。 然后,如果他第二次login,我只是再次创build电子邮件,并检查它是否已经在那里。 通过这个,我不必先让他创build一个本地帐户,并可以识别他login。
以下是如何在Laravel中获取twitter用户电子邮件的示例,在coditty.com上可以find使用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
在这里签出完整的程序 。
谁说你无法获得用户的电子邮件,“请求用户的电子邮件地址”checkbox可在apps.twitter.com上的应用程序权限下使用。 隐私政策URL和服务条款URL字段必须在应用程序设置中完成,以使电子邮件地址访问function。 如果启用,用户将通过oauth / authorize对话框通知您的应用程序可以访问他们的电子邮件地址。