Pregunta

Estoy usando la API de Facebook Graph en Google App Engine. Pude ir a buscar toda la información básica de un usuario. Sin embargo cuando intenté a buscar cualquier información de usuario que requiere el permiso, el correo electrónico para exemple, siempre aparece como Ninguno. He seguido todo el tutorial disponible en las desarrolladores blog.

Aquí está mi código:

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

Y aquí está la plantilla / 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 %}

¿Hay algo mal? ¿Hay otra manera de obtener el correo electrónico de usuario?

¿Fue útil?

Solución 2

Sólo cedió el uso de facebook.py facebookoauth.py y hecho mi propia OAuth 2 cliente utilizando urlfetch. Ver en Facebook docs.

Además, me puso en scope='email' peticiones a https://graph.facebook.com/oauth/authorize? y https://graph.facebook.com/oauth/access_token?.

Otros consejos

correo electrónico está escrito en la creación del usuario. Tal vez usted está tratando de usuarios de acceso que fueron creados cuando no tiene permiso de correo electrónico, por lo que el correo electrónico fue escrita Ninguno. Aparece el problema también para el nuevo objeto de usuario?

Sus miradas código correcto por lo que supongo que no tiene los permisos correctos prolongados. Debe solicitar el "e-mail" permiso prolongado si se va a tratar de obtener la dirección de correo electrónico. Puede encontrar la lista de permisos extendidos aquí . Debe solicitar estos permisos antes de poder leer estas propiedades utilizando la API de gráficos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top