¿Cómo llego de correo electrónico del usuario utilizando la API de Facebook Graph en GAE Python?
-
25-09-2019 - |
Pregunta
Estoy usando la API de Facebook Graph en Google App Engine. Pude ir a buscar toda la información básica de un usuario. Sin embargo cuando intenté a buscar cualquier información de usuario que requiere el permiso, el correo electrónico para exemple, siempre aparece como Ninguno. He seguido todo el tutorial disponible en las desarrolladores blog.
Aquí está mi código:
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
Y aquí está la plantilla / 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 %}
¿Hay algo mal? ¿Hay otra manera de obtener el correo electrónico de usuario?
Solución 2
Sólo cedió el uso de facebook.py facebookoauth.py y hecho mi propia OAuth 2 cliente utilizando urlfetch. Ver en Facebook docs.
Además, me puso en scope='email'
peticiones a https://graph.facebook.com/oauth/authorize?
y https://graph.facebook.com/oauth/access_token?
.
Otros consejos
correo electrónico está escrito en la creación del usuario. Tal vez usted está tratando de usuarios de acceso que fueron creados cuando no tiene permiso de correo electrónico, por lo que el correo electrónico fue escrita Ninguno. Aparece el problema también para el nuevo objeto de usuario?
Sus miradas código correcto por lo que supongo que no tiene los permisos correctos prolongados. Debe solicitar el "e-mail" permiso prolongado si se va a tratar de obtener la dirección de correo electrónico. Puede encontrar la lista de permisos extendidos aquí . Debe solicitar estos permisos antes de poder leer estas propiedades utilizando la API de gráficos.