Facebook-OAuth-login für iframe canvas-apps zeigt ein logo-Bild und ein Gehen Facebook.com Beschriftung anstelle der Protokollierung in
Ich versuche mein (iframe) Facebook-Anwendung für die Verwendung von OAuth für die Authentifizierung.
Ich benutzte die python-sdk von Facebook, aber ich bin nicht wirklich zufrieden mit dem Ergebnis, noch.
Das problem ist, dass wenn ich umleiten Benutzer, die nie zugegriffen mein Antrag auf die login-Seite meiner iframe-diplays eine hässliche Zwischenseite, wie die folgende:
Wenn der Benutzer klickt auf "Gehe zu Facebook.com" link, Sie werden dann weitergeleitet auf die standard - ("Request for Permission" - Seite.
Gibt es eine Möglichkeit, um der ersten Seite und führen den user direkt auf die zweite?
Tritt dieses problem auf den ersten Zugang für die Benutzer, die noch nicht gewährt keine Berechtigung auf meine Bewerbung noch nicht.
Den login-code ist auf der Grundlage der OAuth-Beispiel im Python-SDK:
class LoginHandler(BaseHandler):
def get(self):
verification_code = self.request.get("code")
args = dict(client_id=FACEBOOK_APP_ID, redirect_uri=self.request.path_url)
if self.request.get("code"):
args["client_secret"] = FACEBOOK_APP_SECRET
args["code"] = self.request.get("code")
raw_response = urllib.urlopen(
"https://graph.facebook.com/oauth/access_token?" +
urllib.urlencode(args)).read()
logging.debug("access_token raw response " + raw_response)
response = cgi.parse_qs(raw_response)
access_token = response["access_token"][-1]
# Download the user profile and cache a local instance of the
# basic profile info
graph = facebook.GraphAPI(access_token)
profile = graph.get_object("me")
user = User.get_by_key_name(profile["id"])
if not user:
user = User(key_name=str(profile["id"]),
id=str(profile["id"]),
name=profile["name"],
firstname=profile["first_name"],
profile_url=profile["link"],
access_token=access_token)
user.put()
elif user.access_token != access_token:
# we already know this user, but we need to update
user.access_token = access_token
user.put()
set_cookie(self.response, "fb_user", str(profile["id"]),
expires=time.time() + 30 * 86400)
self.response.headers["P3P"] = 'CP="IDC CURa ADMa OUR IND PHY ONL COM STA"'
self.redirect("/")
else:
self.redirect(
"https://graph.facebook.com/oauth/authorize?" +
urllib.urlencode(args))
InformationsquelleAutor der Frage abahgat | 2010-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem wird dadurch verursacht, um den code, der Facebook nutzt, um Büste aus iframes. Ein Fehler wurde abgelegt auf Facebook bugzilla: http://bugs.developers.facebook.net/show_bug.cgi?id=11326
Die einzige bekannte Lösung für dieses problem ist die erste Umleitung zu
https://graph.facebook.com/oauth/authorize?
von der client-Seite (z.B. Via JavaScript), mitDiese kann ausgelöst werden, wenn der Benutzer klickt auf ein element (z.B. eine Schaltfläche "login") oder wenn eine bestimmte Seite besucht wird (einfach schließen Sie ihn in den HTML-Kopf).
InformationsquelleAutor der Antwort abahgat
ja, top.Lage.href sollten den trick tun. Wenn Sie das problem, dass die app bricht aus der iframe, stellen Sie sicher, dass Sie die canvas-PAGE-url in Ihrem umleiten, anstelle der Leinwand-url (in die app-Einstellungen)
InformationsquelleAutor der Antwort Ray
Dies geschieht offenbar aufgrund eines Fehlers in der Facebook-Seite... ich fand diese Lösung.
Könnte so funktionieren:
immer mit diesem code in script-tags...
InformationsquelleAutor der Antwort artsmorgan
Der ersten Seite ist ein Fehler. Man kann absolut vermeiden, dass sich die Seite. Das problem ist wahrscheinlich damit zu tun, wie Sie tun, der leitet auf die login-Seite in den ersten Platz. Ohne ein Codebeispiel, das ist wirklich die beste Antwort, die ich geben kann.
InformationsquelleAutor der Antwort Nathan Totten