Existe uma maneira de obter a ID de e-mail de um usuário após verificar sua identidade no Twitter usando OAuth?

85

Sou novo no OAuth e estou brincando com a API do Twitter. Consigo obter as credenciais de um usuário após a autenticação fazendo uma solicitação para http://api.twitter.com/1/account/verify_credentials.xml. A resposta contém o ID do usuário, nome da tela, etc., mas não o ID do email.

É possível recuperar o ID de e-mail do usuário?

Atualizar

Acredito que o Facebook forneça essas informações se você solicitar especificamente permissões estendidas . Existe algo semelhante para o Twitter?

Manoj Govindan
fonte
@Philip:: PI concorda e suspeito que não, mas eu queria verificar e relatar para Aquele que Assina os Cheques.
Manoj Govindan
2
@Philip Potter por que você diz isso? o endereço de e-mail é o principal ponto de referência entre a maioria dos provedores de oauth. se você tiver um site com funcionalidade de login de terceiros (como este site) e um usuário fizer login com o Twitter, apenas o identificador exclusivo que pode ser usado é o user_id. se da próxima vez o usuário vier e fizer login com o google, você não terá como saber que se trata do mesmo usuário de antes. no entanto, se dois provedores terceirizados diferentes fornecerem um endereço de e-mail, podemos ter certeza de que é a mesma pessoa (desde que o endereço de e-mail seja verificado por terceiros)
mulllhausen
@mulllhausen a mesma pessoa pode ter contas de e-mail diferentes de qualquer maneira. É apenas melhor ter a opção de e-mail. Eu acrescentaria a isso a capacidade de emparelhar várias contas depois que você for autenticado por meio de um provedor, em vez de depender do endereço de e-mail que o Twitter não suporta. Só estou dizendo para rolar com o que você tem.
Jason Sebring

Respostas:

106

O endereço de e-mail do usuário não pode ser recuperado por meio da API. Esta é uma decisão de design deliberada da equipe da API.

ATUALIZAÇÃO 18/08/2015:

É possível solicitar um endereço de e-mail dos usuários, mas isso exige que seu aplicativo esteja na lista de permissões. Consulte https://dev.twitter.com/rest/reference/get/account/verify_credentials para obter detalhes da chamada de API e este formulário para solicitar a lista de permissões de seu aplicativo.

DWRoelands
fonte
11
Podemos arquivar como bug, preciso muito do endereço de e-mail do usuário autenticado?
iMOBDEV
9
Muito ruim e como você disse, uma decisão deliberada . Se você está autenticando alguém e possui seu próprio banco de dados de usuários, é necessário verificar se já existe um usuário existente (com o mesmo e-mail).
Keyne Viana
4
@JigneshBrahmkhatri Tive o mesmo problema com meu modelo de usuário existente em meu aplicativo, que exigia um endereço de e-mail. Corrigi isso indo para uma etapa extra e mostrei ao usuário um formulário para preencher as informações que faltavam.
Kenny Meyer
24
@KennyM. Isso não é muito seguro, eu poderia simplesmente digitar o e-mail de uma conta que não é minha e ser pareado com essa conta ...
Brian Graham
3
Quando um usuário faz login no Twitter, eu exijo que ele insira um endereço de e-mail também e, em seguida, peço que o verifique antes de ativar sua conta. Basicamente, estou apenas permitindo que eles usem sua conta do Twitter em vez de exigir uma senha.
Gus Shortz de
16

Para OutsourceFactor , que é escrito em Python / Django, eu obtenho o nome de usuário via oAuth1, em seguida, construo um e-mail como "[email protected]", que é garantido como único em todo o Twitter. Em seguida, faço o hash para obter um UUID legal para ser usado e associado à minha conta de usuário local. A mesma coisa para o Yahoo. Google e Facebook usam oAuth2 e me fornecem o endereço de e-mail quando solicitados, o que é bom.

Para garantir várias associações sociais com uma única conta, eu permito associações de contas sociais SOMENTE depois que o usuário tiver criado uma conta localmente e estiver conectado.

Portanto, você deve primeiro criar uma conta (conta local) e, em seguida, usar qualquer um dos provedores de oAuth social para facilitar seus logins futuros. Este é o melhor retorno para o investimento do meu site.

De qualquer forma, você obtém alguma forma única de identificação no Twitter. Então apenas use. Você pode solicitar um endereço de e-mail mais tarde ou antes da associação.

un33k
fonte
4
"provedores para facilitar seus logins futuros", não concordo com isso, porque você já lhes deu trabalho pedindo que criassem uma conta local mostrando um formulário muito grande que o Cliente sempre não gosta de preencher.
RJR
@RJR Bem, o Twitter não está fornecendo um endereço de e-mail. Então você tem que pedir de qualquer maneira. No meu caso, também peço uma senha enquanto estou nisso. Você pode ter um site com requisitos diferentes, e isso também é bom.
un33k
3

O endereço de e-mail é ofuscado pelo Twitter em suas respostas OAuth. O que sempre foi um grande problema para as pessoas que desejam incluir uma função "Cadastre-se no Twitter".

Mais recentemente (início de 2015), o Twitter adicionou suporte a endereços de e-mail por meio de uma segunda chamada de serviço, mas sob certas condições de abuso.

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

Portanto, agora é possível, mas minha opinião é continuar a implementar um logon único OAuth every-provider-but-twitter. Eles devem ser boicotados até agirem normalmente, ou seja, como todos os outros provedores de OAuth.

Filho da noite
fonte
3

No Android usando Fabric , solicito o endereço de e-mail do usuário assim:

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
    }
});

Consulte http://docs.fabric.io/android/twitter/request-user-email-address.html

Paul Muriithi
fonte
sim, eu faço a mesma coisa para o Android, mas não consigo obter o endereço de e-mail na web, também envio a solicitação de endereço de e-mail seguindo este link dev.twitter.com/rest/reference/get/account/verify_credentials
Muhammad Waqas
1

No meu caso, toda vez que recebo a resposta, recebo uma id de autenticação exclusiva para cada usuário e o mesmo para aquele usuário todas as vezes. Usei esse id para criar um email como [email protected] e verificar se já está no meu site (pela primeira vez não está) e depois registrar o usuário. Depois, se ele logar pela segunda vez, acabo de criar o e-mail novamente e verifico se já está lá. Com isso, não preciso fazer com que ele crie uma conta local primeiro e posso identificá-lo para fazer o login.

Mehedi Hasan
fonte
1

Aqui está o exemplo de como obter o e-mail do usuário do Twitter no Laravel, e em coditty.com você pode encontrar o exemplo completo usando 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]);
Igor Simic
fonte
1
Um link para uma solução potencial é sempre bem-vindo, mas adicione contexto ao link para que seus outros usuários tenham uma ideia do que é e por que está lá. Sempre cite a parte mais relevante de um link importante, caso o site de destino esteja inacessível ou fique permanentemente offline. Leve em consideração que o fato de ser pouco mais do que um link para um site externo é uma possível razão de Por que e como algumas respostas são excluídas? .
Tunaki
0

Quem disse que não é possível ???

Eu obtive meu aplicativo iOS após colocar o aplicativo na lista de permissões. Verifique minha resposta aqui .

NSPratik
fonte
0

Adicione este código!

$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

Verifique o procedimento completo aqui .

Pran
fonte
0

Quem disse que você não pode obter e-mail dos usuários, a caixa de seleção “Solicitar endereços de e-mail dos usuários” está disponível nas permissões do aplicativo em apps.twitter.com . Os campos URL da Política de Privacidade e URL dos Termos de Serviço devem ser preenchidos nas configurações do aplicativo para que o acesso ao endereço de e-mail funcione. Se ativado, os usuários serão informados por meio da caixa de diálogo oauth / authorize que seu aplicativo pode acessar seus endereços de e-mail.

Emmanuel Ikechukwu
fonte