Come posso ottenere e-mail dell'utente utilizzando Facebook Graph API GAE Python?
-
25-09-2019 - |
Domanda
Sto utilizzando Facebook Graph API su Google App Engine. Sono stato in grado di recuperare tutte le informazioni di base da un utente. Tuttavia quando ho cercato di prendere qualsiasi informazioni utente che richiede l'autorizzazione, e-mail per exemple, appare sempre come Nessuno. Ho seguito tutto il esercitazione disponibile presso i sviluppatori blog.
Ecco il mio codice:
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
E qui è il modello / 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 %}
C'è qualcosa che non va? C'è altro modo per ottenere e-mail utente?
Soluzione 2
appena rinunciato utilizzando facebook.py facebookoauth.py e reso la mia OAuth 2 client utilizzando UrlFetch. Vedere 'autenticazione degli utenti in un'applicazione Web' in Facebook docs.
Inoltre, ho messo in scope='email'
richieste a https://graph.facebook.com/oauth/authorize?
e https://graph.facebook.com/oauth/access_token?
.
Altri suggerimenti
E-mail è scritto sulla creazione dell'utente. Forse si sta cercando di utenti di accesso che sono stati creati quando non hai avuto il permesso di posta elettronica, quindi l'e-mail scritta c'era nessuno. Il problema appare anche per il nuovo oggetto utente?
Il tuo aspetto codice corretto quindi presumo che non si dispone delle autorizzazioni estese corrette. È necessario chiedere la "e-mail" l'autorizzazione estesa, se avete intenzione di cercare di ottenere l'indirizzo di posta elettronica. È possibile trovare l'elenco delle autorizzazioni estese qui . Dovete chiedere per queste autorizzazioni prima di poter leggere queste proprietà utilizzando l'API grafico.