6

J'utilise l'API Facebook Graph sur Google App Engine. J'ai été capable de récupérer toutes les informations de base d'un utilisateur. Toutefois, lorsque j'ai essayé d'extraire des informations d'utilisateur qui nécessitent une autorisation, un e-mail par exemple, il apparaît toujours comme Aucune. J'ai suivi tout le tutoriel disponible au developers blog.Comment obtenir des courriels utilisateur en utilisant Facebook Graph API dans GAE Python?

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? Existe-t-il un autre moyen d'obtenir des e-mails d'utilisateur?

+0

Essayez d'ajouter une sortie de débogage du profil que vous obtenez de FB et de voir si l'email est là. Lorsque la boîte de dialogue d'autorisation FB apparaît, cela inclut-il l'autorisation de courrier électronique? – cope360

Répondre

0

Votre code semble correct, donc je suppose que vous n'avez pas les autorisations étendues correctes. Vous devez demander l'autorisation étendue "email" si vous essayez d'obtenir l'adresse e-mail. Vous pouvez trouver la liste des autorisations étendues here. Vous devez demander ces autorisations avant de pouvoir lire ces propriétés à l'aide de l'API graphique.

+1

Il a perms = "email" dans la balise du bouton de connexion. Cela devrait demander la permission. – cope360

1

Le courrier électronique est écrit lors de la création de l'utilisateur. Vous essayez peut-être d'accéder aux utilisateurs qui ont été créés lorsque vous n'avez pas reçu d'autorisation par e-mail. Par conséquent, l'e-mail écrit était Aucun. Le problème apparaît-il également pour un nouvel objet Utilisateur?