Je suis nouveau sur OAuth et je joue avec l’API de Twitter. Je suis en mesure de récupérer les informations d'identification d'un utilisateur après l'authentification en adressant 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 courrier électronique.
Est-il possible de récupérer l'identifiant de messagerie de l'utilisateur?
Mettre à jour
Je pense que Facebook fournit ces informations si vous demandez spécifiquement pour autorisations étendues . Y a-t-il quelque chose de similaire pour Twitter?
L'adresse email de l'utilisateur ne peut pas être récupérée via l'API. Il s’agit d’une décision délibérée de la part de l’équipe API.
UPDATE 2015.08.18:
Il est possible de demander une adresse électronique à des utilisateurs, mais votre application doit être inscrite sur 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 mise en liste blanche de votre application.
Pour OutsourceFactor , qui est écrit en Python/Django, je reçois le nom d’utilisateur via oAuth1, puis je construis un courrier électronique sous le nom "[email protected]", lequel est garanti unique sur Twitter. Ensuite, je l'ai haché pour obtenir un Nice 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 qui est Nice.
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 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 unique d'identification de Twitter. Alors utilisez-le. Vous pouvez demander une adresse email plus tard ou avant l'association.
Les adresses e-mail sont obscurcies par Twitter dans leurs réponses à OAuth. Ce qui a toujours été un gros problème pour les personnes souhaitant inclure une fonction "S'inscrire avec Twitter".
Plus récemment (début 2015), Twitter a ajouté la prise en charge des adresses e-mail via un second appel de service, mais sous certaines conditions, maltraitées.
https://dev.Twitter.com/rest/reference/get/account/verify_credentials
C'est donc maintenant possible, mais mon avis est de continuer à mettre en œuvre un système d'authentification unique OAuth pour tous les fournisseurs, à l'exception de Twitter. Ils doivent être boycottés jusqu'à ce qu'ils agissent normalement, je veux dire, comme tous les autres fournisseurs OAuth.
Sous Android avec Fabric , je demande l'adresse de messagerie de l'utilisateur comme suit:
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
Dans mon cas, chaque fois que je reçois la réponse, je reçois un identifiant d’authentification unique pour chaque utilisateur et identique pour cet utilisateur à chaque fois. J'ai donc utilisé cet identifiant pour créer un email tel que [email protected] et vérifier s'il 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 seconde fois, je crée à nouveau le courrier électronique et vérifie s'il est déjà là. Par cela, je n'ai pas à lui faire créer un compte local d'abord et je peux l'identifier pour me connecter.
Voici l'exemple pour obtenir le courrier électronique d'un utilisateur Twitter à Laravel et sur coditty.com vous pouvez trouver l'exemple complet sous 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]);
Qui a dit que ce n'est pas possible ???
Je suis arrivé dans mon application iOS après l'avoir inscrite dans la liste blanche… .. Vérifiez ma réponse ici .
Qui a dit que vous ne pouviez pas recevoir le courrier électronique des utilisateurs, la case à cocher «Demander les adresses électroniques des utilisateurs» est disponible sous les autorisations de l'application sur apps.Twitter.com . L'URL de la politique de confidentialité et l'URL des conditions d'utilisation doivent être renseignés dans les paramètres de l'application pour que l'accès aux adresses électroniques puisse fonctionner. 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 électronique.