我正在尝试设置(iframe)的Facebook应用程序以使用OAuth进行身份验证.
我从Facebook上使用了 python-sdk,但是我并没有对结果感到满意.
我从Facebook上使用了 python-sdk,但是我并没有对结果感到满意.
问题是当我将一个从未访问我的应用程序的用户重定向到登录页面时,我的iframe会显示一个丑陋的中间页面,例如下面的一个:
如果用户点击“转到Facebook.com”链接,则将其重定向到标准的“请求许可”页面.
有没有办法避免第一页,引导用户直接到第二页?
对于尚未授予我的应用程序的用户的第一次访问,会发生此问题.
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>