6

Utilizzo l'API grafico di Facebook su Google App Engine. Sono stato in grado di recuperare tutte le informazioni di base da un utente. Tuttavia, quando ho provato a recuperare qualsiasi informazione utente che richiede l'autorizzazione, e-mail per esempio, appare sempre come None. Ho seguito l'intera esercitazione disponibile allo developers blog.Come posso ricevere l'e-mail utente usando l'API grafico di Facebook in GAE Python?

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'è un altro modo per ottenere l'email dell'utente?

+0

Provare ad aggiungere un output di debug del profilo ottenuto da FB e vedere se l'e-mail è lì. Quando viene visualizzata la finestra di dialogo dell'autorizzazione FB, include l'autorizzazione per le e-mail? – cope360

risposta

0

Il codice sembra corretto, quindi presumo che non si disponga delle autorizzazioni estese corrette. Devi chiedere l'autorizzazione estesa per "email" se stai cercando di ottenere l'indirizzo email. È possibile trovare l'elenco delle autorizzazioni estese here. È necessario chiedere queste autorizzazioni prima di poter leggere queste proprietà utilizzando l'API Graph.

+1

Ha perms = "email" nel tag del pulsante di accesso. Questo dovrebbe richiedere il permesso. – cope360

1

L'email è scritta sulla creazione dell'utente. Forse stai tentando di accedere agli utenti che sono stati creati quando non disponi dell'autorizzazione all'e-mail, quindi l'e-mail scritta era Nessuno. Il problema si presenta anche per il nuovo oggetto Utente?

Problemi correlati