有没有办法获得用户';使用OAuth验证其Twitter身份后的电子邮件ID?

有没有办法获得用户';使用OAuth验证其Twitter身份后的电子邮件ID?,twitter,oauth,twitter-oauth,Twitter,Oauth,Twitter Oauth,我是OAuth的新手,一直在使用Twitter API。通过向http://api.twitter.com/1/account/verify_credentials.xml。响应包含用户id、屏幕名称等,但不包含电子邮件id 是否可以检索用户的电子邮件ID 更新 我相信如果你特别要求,Facebook会提供这些信息。Twitter也有类似的功能吗?用户的电子邮件地址无法通过API检索。这是API团队深思熟虑的设计决策 更新2015.08.18: 可以向用户请求电子邮件地址,但需要将应用程序列入白

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

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

更新


我相信如果你特别要求,Facebook会提供这些信息。Twitter也有类似的功能吗?

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

更新2015.08.18:

可以向用户请求电子邮件地址,但需要将应用程序列入白名单。有关API调用的详细信息,请参阅以请求应用程序的白名单。

对于用Python/Django编写的应用程序,我通过oAuth1获取用户名,然后将电子邮件构造为“username@twitter.com“这在推特上肯定是独一无二的。然后我对它进行散列,以获得一个好的UUID来使用,并与我的本地用户帐户相关联。雅虎也是如此。谷歌和Facebook使用oAuth2,他们根据我的要求提供电子邮件地址,这很好

为了确保单个帐户具有多个社会关联,我只允许用户在本地创建帐户并登录后才进行社会关联


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


不管怎样,你可以从twitter上获得一些独特的ID形式。所以就用它吧。您可以在关联之后或之前询问电子邮件地址。

Twitter在OAuth回复中会混淆电子邮件地址。对于那些想要加入“在Twitter上注册”功能的人来说,这一直是一个大问题

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

所以现在这是可能的,但我的意见是继续实现OAuth,除了twitter单点登录之外,每个提供商都可以。他们必须抵制,直到他们正常行动为止,我的意思是像其他所有OAuth提供商一样

谁说这不可能???

我在我的iOS应用程序中加入了白名单。 检查我的答案。

在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
    }
});
TwitterAuthClient authClient=new TwitterAuthClient();
authClient.requestEmail(会话,新回调(){
@凌驾
公开作废成功(结果){
//对结果执行一些操作,结果将提供电子邮件地址
}
@凌驾
公共无效失败(TwitterException异常){
//失败时做点什么
}
});

请参见

在我的例子中,每次收到响应时,我都会为每个用户获得一个唯一的身份验证id,并且每次都为该用户提供相同的身份验证id。所以我用这个id创建了一封类似unique的电子邮件_id@twitter.com并检查我的网站上是否已经有(第一次没有),然后注册用户。然后,如果他第二次登录,我只是再次创建电子邮件,并检查它是否已经在那里。这样,我就不必让他先创建一个本地帐户,就可以识别他登录。

添加此代码

$params=array('include_email'=>'true','include_entities'=>'false','skip_status'=>'true')

//获取twitter用户配置文件详细信息
$twt_id=$data->id//twitter用户id
$twt_email=$data->email//twitter用户电子邮件


签出完整过程

以下是如何在Laravel中获取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]);

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

@Philip::p我同意,但我怀疑没有,但我想核实一下,并向支票签字人报告。@Philip Potter您为什么这么说?电子邮件地址是大多数oauth提供商之间的关键参考点。如果您有一个具有第三方登录功能的网站(如本网站),并且用户使用twitter登录,那么唯一可以使用的唯一标识符是用户id。如果下次用户出现并使用google登录,则您无法知道这是与以前相同的用户。但是,如果两个不同的第三方提供商提供了一个电子邮件地址,那么我们可以确定它是同一个人(只要该电子邮件地址经过第三方验证)@mulllhausen同一个人可以拥有不同的电子邮件帐户。不过,有电子邮件选项更好。我希望在通过一个提供商进行身份验证后,能够将多个帐户配对在一起,而不是依赖twitter不支持的电子邮件地址。我只是说随你的便。我们可以把它作为bug归档吗?我非常需要经过身份验证的用户的电子邮件地址?太糟糕了,正如你所说,这是一个深思熟虑的决定。如果您正在对某人进行身份验证,并且拥有自己的用户数据库,则需要检查现有用户(具有相同的电子邮件)是否已经存在。@JigneshBrahmkhatri我的应用程序中的现有用户模型也存在同样的问题,需要电子邮件地址。我通过执行额外的步骤并向用户显示一个表单来完成缺少的信息,从而解决了这个问题。@KennyM。这不是很安全,我可以输入一些不是我的帐户的电子邮件,然后与它配对
 // 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]);