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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top