Как получить электронную почту пользователя, используя API Facebook Graph API в Gae Python?
-
25-09-2019 - |
Вопрос
Я использую Facebook Graph API на Google App Engine. Я смог получить всю основную информацию от пользователя. Однако, когда я попытался получить любую информацию о пользователе, которая требует разрешения, электронного письма для экземпляра, она всегда выглядит как никого. Я следовал за всем руководством, доступным на Разработчики блог.
Вот мой код:
class User(db.Model):
id = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
name = db.StringProperty(required=True)
email = db.StringProperty(required=True)
profile_url = db.StringProperty(required=True)
access_token = db.StringProperty(required=True)
class BaseHandler(webapp.RequestHandler):
"""Provides access to the active Facebook user in self.current_user
The property is lazy-loaded on first access, using the cookie saved
by the Facebook JavaScript SDK to determine the user ID of the active
user. See http://developers.facebook.com/docs/authentication/ for
more information.
"""
@property
def current_user(self):
if not hasattr(self, "_current_user"):
self._current_user = None
cookie = facebook.get_user_from_cookie(
self.request.cookies, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET)
if cookie:
# Store a local instance of the user data so we don't need
# a round-trip to Facebook on every request
user = User.get_by_key_name(cookie["uid"])
if not user:
graph = facebook.GraphAPI(cookie["access_token"])
profile = graph.get_object("me")
user = User(key_name=str(profile["id"]),
id=str(profile["id"]),
name=profile["name"],
email=profile["email"],
profile_url=profile["link"],
access_token=cookie["access_token"])
user.put()
elif user.access_token != cookie["access_token"]:
user.access_token = cookie["access_token"]
user.put()
self._current_user = user
return self._current_user
А вот шаблон / html:
<fb:login-button autologoutlink="true" perms="email"></fb:login-button>
{% if current_user %}
<p><a href="{{ current_user.profile_url }}"><img src="http://graph.facebook.com/{{ current_user.id }}/picture?type=square"/></a></p>
<p>Hello, {{ current_user.name|escape }}</p>
<p>email: {{ current_user.email }} </p>
{% endif %}
Здесь что-то не так? Есть ли другой способ получить пользовательскую электронную почту?
Решение 2
Просто сдался, используя Facebook.py.py. а также Facebookoauth.py. и сделал свой собственный клиент OAUTH 2, используя URLFetch. Видеть «Аутентификация пользователей в веб-приложении» В Facebook Docs.
Кроме того, я положил scope='email'
в запросах к https://graph.facebook.com/oauth/authorize?
а также https://graph.facebook.com/oauth/access_token?
.
Другие советы
Электронная почта написана на создании пользователя. Может быть, вы пытаетесь получить доступ к пользователям, которые были созданы, когда у вас не было разрешения электронной почты, поэтому письменное письмо было никто. Означает ли проблема для нового объекта пользователя?
Ваш код выглядит правильно, поэтому я предполагаю, что у вас нет правильных расширенных разрешений. Вы должны попросить «электронную почту» расширенного разрешения, если вы собираетесь попытаться получить адрес электронной почты. Вы можете найти список расширенных разрешений здесь. Отказ Вы должны просить эти разрешения, прежде чем вы сможете прочитать эти свойства, используя график API.