身份验证 – 用于iframe画布应用程序的Facebook OAuth登录显示徽标图像和转到Facebook.com标题而不是登录

前端之家收集整理的这篇文章主要介绍了身份验证 – 用于iframe画布应用程序的Facebook OAuth登录显示徽标图像和转到Facebook.com标题而不是登录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试设置(iframe)的Facebook应用程序以使用OAuth进行身份验证.
我从Facebook上使用了 python-sdk,但是我并没有对结果感到满意.

问题是当我将一个从未访问我的应用程序的用户重定向登录页面时,我的iframe会显示一个丑陋的中间页面,例如下面的一个:

如果用户点击“转到Facebook.com”链接,则将其重定向到标准的“请求许可”页面.

有没有办法避免第一页,引导用户直接到第二页?

对于尚未授予我的应用程序的用户的第一次访问,会发生此问题.

登录代码基于Python SDK中的OAuth示例:

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))

解决方法

这个问题是由Facebook用来破解iframe的代码引起的.在Facebook的bugzilla上已经出现了一个bug: http://bugs.developers.facebook.net/show_bug.cgi?id=11326

唯一已知的解决这个问题的方法是首先重定向到https://graph.facebook.com/oauth/authorize?从客户端(即通过JavaScript),使用

<script type='text/javascript'>
 top.location.href="https://graph.facebook.com/oauth/authorize?.......
 </script>

用户点击某个元素(例如登录按钮)或每当访问特定页面(仅将其包含在HTML头中)时,可以触发这一点.

原文链接:https://www.f2er.com/html/231076.html

猜你在找的HTML相关文章