Есть ли способ получить ваш адрес электронной почты после аутентификации в Gmail с помощью Oauth? - PullRequest
5 голосов
/ 07 августа 2011

В веб-приложении Python я могу подключиться к Gmail, используя OAuth и IMAP. OAuth просто использует любую учетную запись Google, в которую вы сейчас вошли, и просит предоставить вам доступ к веб-приложению. Однако он не предоставляет API для фактического получения адреса электронной почты этой учетной записи.

Проблема в том, что, хотя пользователь предоставляет доступ через OAuth, для взаимодействия с Gmail все равно необходимо явно указать адрес электронной почты в URL-адресе подключения IMAP:

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

Из-за этого веб-приложение должно запрашивать у пользователя адрес электронной почты и запрашивать у него доступ из Gmail через OAuth. Хуже всего то, что введенный ими адрес электронной почты может не совпадать с адресом электронной почты учетной записи, к которой они предоставляют доступ, что приводит к сбою приложения.

Есть ли способ получить свой адрес электронной почты с помощью OAuth, чтобы вы могли поместить его в этот URL-адрес, не спрашивая его у пользователя? Я пытался посмотреть этот ответ , но Google возвращает Bad Request всякий раз, когда я использую и https://mail.google.com/, и https://www.googleapis.com/auth/userinfo#email в качестве области действия.

Ответы [ 2 ]

4 голосов
/ 07 августа 2011

Что вам нужно, это API контактов Google .Если вы авторизуетесь через OAuth, вы, вероятно, в настоящее время запрашиваете разрешение на доступ к области gmail:

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

Вам также потребуется запросить разрешение для области контактов:

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

Как только вы это сделаете, вы можете сделать запрос GET, подобный следующему:

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

Это должно вернуть кучу xml, вот некоторые соответствующие биты:

<?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>

Как вы можете видеть, вы можете найти электронную почту авторизованных пользователей в нескольких местах.

Если вы используете OAuth, возможно, вы захотите взглянуть на игровую площадку Google OAuth, я нашел ее оченьудобно: http://googlecodesamples.com/oauth_playground/index.php. Если вы решите использовать OAuth2, есть эквивалентный инструмент на https://code.google.com/oauthplayground

1 голос
/ 21 октября 2013

skorks answer работает отлично, но вы должны использовать правильный API.Добавляя дополнительную область действия

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

Вы делаете это "правильным образом"!

Я написал полную статью об этом с примером кода: http://www.hackviking.com/2013/10/python-get-user-info-after-oauth/ Код доступен здесь:https://code.google.com/p/google-api-oauth-demo/

...