Connexion Facebook OAuth pour les applications de toile iframe affiche une image de logo et une légende Aller à Facebook.com au lieu de se connecter
Je suis en train de configurer mon (iframe) Facebook application à utiliser pour l'authentification OAuth.
J'ai utilisé le python-sdk de Facebook, mais je ne suis pas vraiment convaincu par le résultat, encore.
Le problème est que lorsque je rediriger un utilisateur qui n'a jamais accédé à ma demande à la page de connexion, mon iframe afche une vilaine page intermédiaire, tels que le suivant:
Si l'utilisateur clique sur "Aller à Facebook.com" le lien, elle est alors redirigé vers le standard de la "Demande de Permission" de la page.
Est-il un moyen d'éviter la première page et conduire l'utilisateur directement à la seconde?
Ce problème se pose sur le premier accès pour les utilisateurs qui n'ont pas accordé la permission de mon application.
Le code de connexion est basée sur le protocole OAuth exemple dans le SDK Python:
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))
source d'informationauteur abahgat
Vous devez vous connecter pour publier un commentaire.
Le problème est causé par le code Facebook utilise le buste de iframes. Un bug a été déposé sur le Facebook de bugzilla: http://bugs.developers.facebook.net/show_bug.cgi?id=11326
La seule solution connue à ce problème consiste à faire le premier rediriger vers
https://graph.facebook.com/oauth/authorize?
du côté client (Via JavaScript), à l'aide deCela peut être déclenché lorsque l'utilisateur clique sur un élément (par exemple un bouton de connexion) ou à chaque fois qu'une page spécifique est visité (il suffit d'inclure dans le code HTML de la tête).
oui, en haut.emplacement.href devrait faire l'affaire. Si vous obtenez le problème que l'application éclate l'iframe, assurez-vous d'utiliser la toile url de la PAGE dans votre redirection, en lieu et place de la toile url (dans les paramètres de votre app)
Ce qui se passe, apparemment en raison d'un bogue dans le Facebook de côté... j'ai trouvé cette solution.
Pourrait travailler de cette façon:
toujours utiliser ce code dans les balises de script...
La première page est une erreur. Vous ne pouvez absolument éviter que la page. Le problème est probablement lié à la façon dont vous faites le redirige vers la page de connexion dans la première place. Sans un exemple de code, c'est vraiment la meilleure réponse que je peux donner.