Frage

Ich bin mit Facebook Graph API auf Google App Engine. Ich konnte alle grundlegenden Informationen von einem Benutzer holen. Jedoch als ich versuchte, jeden Benutzer Informationen abzurufen, die Erlaubnis, E-Mail für exemple erfordert, erscheint es immer als Keine. Ich habe die ganze Tutorial zur Verfügung, gefolgt bei den Entwickler Blog .

Hier ist mein 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

Und hier ist die Vorlage / 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 %}

Gibt es etwas falsch? Gibt es andere Art und Weise Benutzer E-Mail zu bekommen?

War es hilfreich?

Lösung 2

einfach aufgegeben mit facebook.py und facebookoauth.py und meine eigene OAuth 2 gemacht Client mit urlfetch. Siehe 'Authentifizierung von Benutzern in einer Web-Anwendung' in Facebook docs.

Auch ich legte scope='email' in Anfragen an https://graph.facebook.com/oauth/authorize? und https://graph.facebook.com/oauth/access_token?.

Andere Tipps

E-Mail an Benutzer Schöpfung geschrieben. Vielleicht versuchen Sie den Zugriff auf Benutzer, die erstellt wurden, wenn Sie nicht über die Berechtigung E-Mail haben, damit die E-Mail geschrieben war Keine. Tritt das Problem auch für neues Benutzerobjekt erscheinen?

Der Code sieht richtig so nehme ich an, dass Sie würde nicht die richtigen erweiterten Berechtigungen haben. Sie müssen für die „E-Mail“ extended Erlaubnis fragen, wenn Sie versuchen werden, um die E-Mail-Adresse zu erhalten. Sie können die Liste der erweiterten Berechtigungen finden hier . Sie müssen für diese Berechtigungen fragen, bevor Sie diese Eigenschaften mit Hilfe der Graph API lesen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top