Existe-t-il un moyen d'obtenir l'ID de messagerie d'un utilisateur après avoir vérifié son identité Twitter à l'aide d'OAuth?

85

Je suis nouveau sur OAuth et j'ai joué avec l'API Twitter. Je suis en mesure de récupérer les informations d'identification d'un utilisateur après l'authentification en faisant une demande à http://api.twitter.com/1/account/verify_credentials.xml. La réponse contient l'ID utilisateur, le nom d'écran, etc. mais pas l'ID de messagerie.

Est-il possible du tout de récupérer l'ID de messagerie de l'utilisateur?

Mise à jour

Je pense que Facebook fournit ces informations si vous demandez spécifiquement des autorisations étendues . Y a-t-il quelque chose de similaire pour Twitter?

Manoj Govindan
la source
@Philip:: PI est d'accord et je soupçonne que non, mais je voulais vérifier et faire rapport à Celui qui signe les chèques.
Manoj Govindan
2
@Philip Potter pourquoi dites-vous ça? l'adresse e-mail est le point de référence clé entre la plupart des fournisseurs oauth. si vous avez un site Web avec une fonctionnalité de connexion tierce (comme ce site Web) et qu'un utilisateur se connecte avec Twitter, le seul identifiant unique qui peut être utilisé est user_id. si la prochaine fois que l'utilisateur vient et se connecte avec google, vous n'avez aucun moyen de savoir qu'il s'agit du même utilisateur qu'avant. Cependant, si deux fournisseurs tiers différents donnent une adresse e-mail, nous pouvons être sûrs qu'il s'agit de la même personne (à condition que l'adresse e-mail soit vérifiée par les tiers)
mulllhausen
@mulllhausen, la même personne peut de toute façon avoir différents comptes de messagerie. C'est juste plus agréable d'avoir l'option e-mail. J'introduirais dans cela la possibilité de coupler plusieurs comptes après que vous soyez authentifié via un fournisseur au lieu de compter sur l'adresse e-mail que Twitter ne prend pas en charge. Je dis juste rouler avec ce que vous avez.
Jason Sebring

Réponses:

106

L'adresse e-mail de l'utilisateur ne peut pas être récupérée via l'API. Il s'agit d'une décision de conception délibérée de l'équipe API.

MISE À JOUR 2015.08.18:

Il est possible de demander une adresse e-mail aux utilisateurs, mais cela nécessite que votre application soit ajoutée à la liste blanche. Voir https://dev.twitter.com/rest/reference/get/account/verify_credentials pour plus de détails sur l'appel API et ce formulaire pour demander la liste blanche de votre application.

DWRoelands
la source
11
Pouvons-nous le classer en tant que bug, j'ai extrêmement besoin de l'adresse e-mail de l'utilisateur authentifié?
iMOBDEV
9
Dommage et comme vous l'avez dit, une décision délibérée . Si vous authentifiez quelqu'un et que vous avez votre propre base de données d'utilisateurs, vous devez vérifier si un utilisateur existant (avec le même e-mail) existe déjà.
Keyne Viana
4
@JigneshBrahmkhatri J'ai eu le même problème avec mon modèle d'utilisateur existant dans mon application qui nécessitait une adresse e-mail. J'ai corrigé cela en passant à l'étape supplémentaire et en montrant à l'utilisateur un formulaire pour compléter les informations manquantes.
Kenny Meyer
24
@KennyM. Ce n'est pas très sécurisé, je pourrais simplement taper l'e-mail d'un compte qui n'est pas le mien et être associé à ce compte ...
Brian Graham
3
Lorsqu'un utilisateur se connecte avec Twitter, je lui demande de saisir également une adresse e-mail, puis de la vérifier avant d'activer son compte. En gros, je les laisse simplement utiliser leur compte Twitter au lieu d'exiger un mot de passe.
Gus Shortz
16

Pour OutsourceFactor , qui est écrit en Python / Django, j'obtiens le nom d'utilisateur via oAuth1, puis je construis un e-mail comme "[email protected]" qui est garanti d'être unique sur Twitter. Ensuite, je le hache pour obtenir un bon UUID à utiliser et à associer à mon compte d'utilisateur local. Même chose pour Yahoo. Google et Facebook utilisent oAuth2 et ils me donnent l'adresse e-mail sur demande, ce qui est bien.

Pour garantir plusieurs associations sociales avec un seul compte, j'autorise les associations de comptes sociaux UNIQUEMENT après que l'utilisateur a créé un compte localement et s'est connecté.

Donc, vous devez d'abord créer un compte (compte local), puis vous pouvez utiliser l'un des fournisseurs sociaux oAuth pour faciliter vos futures connexions. C'est le meilleur rapport qualité / prix pour mon site.

Quoi qu'il en soit, vous obtenez une forme d'identité unique de Twitter. Alors utilisez-le. Vous pouvez demander une adresse e-mail plus tard ou avant l'association.

un33k
la source
4
"fournisseurs pour faciliter vos futures connexions", je ne suis pas d'accord avec cela, car vous leur avez déjà posé des problèmes en leur demandant de créer un compte local en affichant un très grand formulaire que le Client n'aime pas toujours remplir.
RJR
@RJR Eh bien, Twitter ne vous donne pas d'adresse e-mail. Il faut donc le demander de toute façon. Dans mon cas, je demande aussi un mot de passe pendant que j'y suis. Vous pourriez avoir un site avec des exigences différentes, et c'est bien aussi.
un33k
3

L'adresse e-mail est masquée par Twitter dans leurs réponses OAuth. Ce qui a toujours été un grand problème pour les personnes souhaitant inclure une fonction «S'inscrire sur Twitter».

Plus récemment (début 2015), Twitter a ajouté la prise en charge des adresses e-mail via un deuxième appel de service, mais sous certaines conditions abusives.

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

Alors maintenant, c'est possible, mais mon avis est de continuer à mettre en œuvre une connexion unique OAuth pour tous les fournisseurs sauf pour Twitter. Ils doivent être boycottés jusqu'à ce qu'ils agissent normalement, je veux dire comme tous les autres fournisseurs OAuth.

Enfant de lune
la source
3

Dans Android utilisant Fabric , je demande l'adresse e-mail de l'utilisateur comme ceci:

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

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

Paul Muriithi
la source
oui je fais la même chose pour android mais je n'arrive pas à obtenir une adresse e-mail sur le Web, je soumets également une demande d'adresse e-mail en suivant ce lien dev.twitter.com/rest/reference/get/account/verify_credentials
Muhammad Waqas
1

Dans mon cas, chaque fois que j'obtiens la réponse, j'ai un identifiant d'authentification unique pour chaque utilisateur et le même pour cet utilisateur à chaque fois. J'ai donc utilisé cet identifiant pour créer un e-mail comme [email protected] et vérifier si c'est déjà sur mon site (pour la première fois, ce n'est pas le cas), puis enregistrer l'utilisateur. Ensuite, s'il se connecte une deuxième fois, je crée à nouveau l'e-mail et vérifie si c'est déjà là. Par cela, je n'ai pas à lui faire créer un compte local au préalable et je peux l'identifier pour se connecter.

Mehedi Hasan
la source
1

Voici l'exemple comment obtenir un e-mail d'utilisateur Twitter dans Laravel, et sur coditty.com, vous pouvez trouver l'exemple complet en utilisant 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
la source
1
Un lien vers une solution potentielle est toujours le bienvenu, mais veuillez ajouter du contexte autour du lien afin que vos collègues utilisateurs aient une idée de ce que c'est et pourquoi il est là. Citez toujours la partie la plus pertinente d'un lien important, au cas où le site cible serait inaccessible ou serait définitivement hors ligne. Tenez compte du fait qu'être à peine plus qu'un lien vers un site externe est une raison possible pour savoir pourquoi et comment certaines réponses sont-elles supprimées? .
Tunaki
0

Qui a dit que ce n'était pas possible ???

Je suis entré dans mon application iOS après avoir ajouté l'application à la liste blanche. Vérifiez ma réponse ici .

NSPratik
la source
0

Ajoutez ce code!

$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

Découvrez la procédure complète ici .

Pran
la source
0

Qui dit que vous ne pouvez pas recevoir les e-mails des utilisateurs, la case à cocher "Demander des adresses e-mail aux utilisateurs" est disponible sous les autorisations de l'application sur apps.twitter.com . Les champs URL de la politique de confidentialité et URL des conditions d'utilisation doivent être remplis dans les paramètres de l'application pour que l'accès à l'adresse e-mail fonctionne. Si cette option est activée, les utilisateurs seront informés via la boîte de dialogue oauth / authorize que votre application peut accéder à leur adresse e-mail.

Emmanuel Ikechukwu
la source