用于现有Facebook连接网站的FB iOS SDK会话
我的网站是通过 Facebook 连接来认证用户的,用户可以通过 Facebook 的 iOS SDK 登录。我在网站上使用了 Facebook 的 JavaScript SDK 和 Python 库来创建一个 cookie,并用应用的密钥来验证用户:
def get_user_from_cookie(cookies, app_id, app_secret):
"""Parses the cookie set by the official Facebook JavaScript SDK.
cookies should be a dictionary-like object mapping cookie names to
cookie values.
If the user is logged in via Facebook, we return a dictionary with the
keys "uid" and "access_token". The former is the user's Facebook ID,
and the latter can be used to make authenticated requests to the Graph API.
If the user is not logged in, we return None.
Download the official Facebook JavaScript SDK at
http://github.com/facebook/connect-js/. Read more about Facebook
authentication at http://developers.facebook.com/docs/authentication/.
"""
cookie = cookies.get("fbs_" + app_id, "")
if not cookie: return None
args = dict((k, v[-1]) for k, v in cgi.parse_qs(cookie.strip('"')).items())
payload = "".join(k + "=" + args[k] for k in sorted(args.keys())
if k != "sig")
sig = hashlib.md5(payload + app_secret).hexdigest()
expires = int(args["expires"])
if sig == args.get("sig") and (expires == 0 or time.time() < expires):
return args
else:
return None
现在,我在想,如果用户通过 iPhone 登录,我该如何把他们连接到我的网站?我是不是只需要把访问令牌发送到我的服务器,然后根据这个访问令牌去调用图形 API(也就是跳过上面的函数)?如果这样做的话,上面那个函数提供的所有验证又该怎么办呢?
2 个回答
0
获取和验证cookie对于Google AppEngine或JavaScript SDK的访问很有用。
如果你想在Python SDK中访问由iOS应用启动的用户会话,只需要使用:
graph = facebook.GraphAPI(access_token)
user = graph.get_object("me")
希望这能帮到你。
0
如果你想使用Facebook的iOS接口,你需要做以下几件事:
首先,创建并初始化一个Facebook对象。
Facebook *facebookObject = [[Facebook alloc] init];
接着,检查权限。
NSArray *permissions = [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil];
然后,进行Facebook的授权。
[facebookObject authorize:APP_ID permissions:permissions delegate:self];
完成这些后,你可以使用NSUserDefaults来保存会话,像这样:
我用NSUserDefaults来存储会话。
[[NSUserDefaults standardUserDefaults] setObject:facebookObject.accessToken forKey:@"AccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:facebookObject.expirationDate forKey:@"ExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
之后,我可以通过以下方式获取访问权限:
facebookObject.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
facebookObject.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
这样一来,你就可以保持会话活跃,用户只需要输入一次登录名和密码。我觉得这就是所谓的cookies。