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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top