5 votes

Existe-t-il un moyen d'obtenir votre adresse électronique après vous être authentifié auprès de Gmail à l'aide d'Oauth ?

Dans une application web Python, je peux me connecter à Gmail en utilisant OAuth et IMAP. OAuth utilise le compte Google auquel vous êtes actuellement connecté et vous demande d'autoriser l'accès à l'application web. Cependant, il ne fournit pas d'API pour récupérer l'adresse électronique de ce compte.

Le problème est que, même si l'utilisateur accorde l'accès avec OAuth, pour interfacer avec Gmail, vous devez toujours fournir explicitement l'adresse e-mail dans votre URL de connexion IMAP :

https://mail.google.com/mail/b/[your-email]/imap/

Pour cette raison, l'application web doit demander à l'utilisateur son adresse électronique et leur demander d'autoriser l'accès à partir de Gmail avec OAuth. Pire encore, l'adresse électronique qu'ils saisissent peut ne pas correspondre à l'adresse électronique du compte avec lequel ils accordent l'accès, ce qui fait échouer l'application.

Existe-t-il un moyen d'obtenir votre adresse e-mail à l'aide d'OAuth afin de pouvoir l'insérer dans cette URL sans demander à l'utilisateur de la fournir ? J'ai essayé de regarder sur cette réponse mais Google renvoie un Bad Request chaque fois que j'utilise les deux https://mail.google.com/ y https://www.googleapis.com/auth/userinfo#email comme mon champ d'application.

4voto

skorks Points 3379

Ce que vous recherchez, c'est la Google Contacts API . Si vous procédez à l'autorisation via OAuth, vous demandez probablement l'autorisation d'accéder à l'espace gmail :

https://mail.google.com/mail/feed/atom

Vous devrez également demander l'autorisation d'utiliser le champ d'application des contacts :

https://www.google.com/m8/feeds/

Une fois que vous l'avez obtenu, vous pouvez faire une demande GET similaire à la suivante :

https://www.google.com/m8/feeds/contacts/default/full?max-results=1

Cette opération devrait permettre d'obtenir un grand nombre de fichiers xml, dont voici quelques éléments pertinents :

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;CEcMRX0_eCp7ImA9WhdRF00.&quot;">
<id>joebloggs@gmail.com</id>
...
<author>
  <name>Joe Bloggs</name>
  <email>joebloggs@gmail.com</email>
</author>
...
</feed>

Comme vous pouvez le constater, vous pouvez trouver l'adresse électronique des utilisateurs autorisés à plusieurs endroits.

Si vous utilisez OAuth, vous pouvez également jeter un coup d'œil au terrain de jeu Google OAuth, je l'ai trouvé très pratique : http://googlecodesamples.com/oauth_playground/index.php . Si vous décidez d'utiliser OAuth2, il existe un outil équivalent à l'adresse suivante https://code.google.com/oauthplayground

1voto

Kristofer Kallsbo Points 161

La réponse de Skorks fonctionne parfaitement, mais vous devez utiliser la bonne API. En ajoutant une portée supplémentaire à

https://www.googleapis.com/auth/userinfo.email

Vous le faites "comme il faut" !

J'ai écrit un article complet à ce sujet avec un exemple de code : http://www.hackviking.com/2013/10/python-get-user-info-after-oauth/ Code disponible ici : https://code.google.com/p/google-api-oauth-demo/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X