Как мне получить электронную почту пользователя с помощью Facebook Graph API в GAE Python?

Я использую Facebook Graph API на Google App Engine. Я смог получить всю основную информацию от пользователя. Однако, когда я пытался получить любую информацию о пользователе, для которой требуется разрешение, например, электронная почта, она всегда отображается как Нет. Я следил за всем руководством, доступным в блоге разработчиков .

Вот мой код:

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

А вот шаблон / HTML:



{% if current_user %}
  

Hello, {{ current_user.name|escape }}

email: {{ current_user.email }}

{% endif %}

Что-то не так? Есть ли другой способ получить адрес электронной почты пользователя?

6
задан fjsj 23 October 2010 в 21:00
поделиться