Как получить адрес электронной почты пользователя с помощью GData?
Я пытаюсь использовать GData для получения адреса электронной почты, реального имени и URL профиля пользователя, который только что авторизовал мой сайт с помощью Google OAuth.
Мы знаем, как запросить его, используя поток Google OpenID, но поток OpenID имеет серьезное ограничение, которое мы должны запросить для домена пользователя Служб Google, прежде чем мы узнаем, куда отправить их для входа в систему. По крайней мере, с помощью OAuth (или даже AuthSub) пользователю будет предложено войти в свою учетную запись Google.
2 ответа
До сих пор не ясно, возможно ли это, но теперь мы обходим это, используя поток OpenID. С добавлением их универсального потока входа в систему у нас больше нет причин избегать их потока OpenID.
Если вы получаете фид контактов пользователя, вы можете получить доступ к authors
поле, которое дает вам адрес электронной почты и имя. Кроме того, канал id
поле является адресом электронной почты человека, которому принадлежат контакты.
Пример (в Scala) с именами изменился, предполагая, что пользователь AuthSub (извините, я не перенес свой код в OAuth), где у вас уже есть сеанс token
:
scala> val contacts_service = new ContactsService("foo")
contacts_service: com.google.gdata.client.contacts.ContactsService = com.google.gdata.client.contacts.ContactsService@3fd1acee
scala> contacts_service.setAuthSubToken(token, null)
scala> val feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full?max-results=10000")
feedUrl: java.net.URL = https://www.google.com/m8/feeds/contacts/default/full?max-results=10000
scala> val feed = contacts_service.getFeed(feedUrl, classOf[ContactFeed])
feed: com.google.gdata.data.contacts.ContactFeed = {ContactFeed com.google.gdata.data.contacts.ContactFeed@271a95f8}
scala> feed.getId
res13: java.lang.String = user@example.com
scala> val p = feed.getAuthors.head
p: com.google.gdata.data.Person = com.google.gdata.data.Person@513b4686
scala> p.getEmail
res14: java.lang.String = user@example.com
scala> p.getName
res15: java.lang.String = Example User