Comment puis-je obtenir email de l'utilisateur en utilisant l'API Facebook Graph dans GAE Python?
-
25-09-2019 - |
Question
J'utilise Facebook Graph API sur Google App Engine. J'ai pu aller chercher toutes les informations de base d'un utilisateur. Cependant, lorsque j'ai essayé de chercher toute information d'utilisateur qui nécessite l'autorisation, le courrier électronique pour exemple, il apparaît toujours comme Aucun. J'ai suivi le tutoriel disponible tout au le blog .
Voici mon code:
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
Et voici le modèle / 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 %}
Y at-il quelque chose de mal? Y at-il autre moyen d'obtenir email de l'utilisateur?
La solution 2
abandonnais en utilisant facebook.py facebookoauth.py et fait mon propre OAuth 2 client à l'aide urlfetch. Voir 'Authentification d'utilisateurs dans une application Web' docs Facebook.
En outre, je mets scope='email'
dans les demandes de https://graph.facebook.com/oauth/authorize?
et https://graph.facebook.com/oauth/access_token?
.
Autres conseils
Le courrier électronique est écrit sur la création d'utilisateur. Peut-être que vous essayez d'accéder aux utilisateurs qui ont été créés lorsque vous n'avez pas la permission par courriel, par conséquent l'email était écrite Aucun. Le problème apparaît également pour nouvel objet utilisateur?
Votre code semble correct, donc je présume que vous ne disposez pas des autorisations étendues correctes. Vous devez demander la permission prolongée « e-mail » si vous allez essayer d'obtenir l'adresse e-mail. Vous trouverez la liste des autorisations étendues . Vous devez demander ces autorisations avant de pouvoir lire ces propriétés à l'aide de l'API graphique.