aba*_*gat 15 authentication facebook oauth
我正在尝试设置我的(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))
Run Code Online (Sandbox Code Playgroud)
aba*_*gat 10
这个问题是由Facebook用来淘汰iframe的代码造成的.在Facebook的bugzilla上提交了一个错误: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>
Run Code Online (Sandbox Code Playgroud)
当用户点击某个元素(例如登录按钮)或每次访问特定页面时(只需将其包含在HTML头中),就可以触发此操作.
| 归档时间: |
|
| 查看次数: |
14261 次 |
| 最近记录: |