Iphone 用于现有fb connect网站的fb ios sdk会话

Iphone 用于现有fb connect网站的fb ios sdk会话,iphone,python,objective-c,facebook,Iphone,Python,Objective C,Facebook,我的fb connect Web服务器如何对通过fb ios sdk登录的用户进行身份验证?我有一个使用facebook connect的网站。在其中,我确实使用应用程序机密通过facebook javascript sdk通过facebook python库创建的cookie对用户进行身份验证: def get_user_from_cookie(cookies, app_id, app_secret): """Parses the cookie set by the official

我的fb connect Web服务器如何对通过fb ios sdk登录的用户进行身份验证?我有一个使用facebook connect的网站。在其中,我确实使用应用程序机密通过facebook javascript sdk通过facebook 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登录的用户连接到我的网站。我是否只是将访问令牌发送到我的Web服务器,并基于访问令牌调用graphjust bypass上述函数?如果是这样,那么上述函数提供的所有验证又如何呢?

如果您想使用Facebook iOS API,您需要:

Alloc和Init一个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的原因。

cookie获取和验证对于Google AppEngine或JavaScript SDK访问非常有用

要访问在iOS应用程序中启动的用户会话,请在Python SDK中使用:

graph = facebook.GraphAPI(access_token)
user = graph.get_object("me")

希望有帮助。

@ronin,thx,但我已经能够通过ios登录并请求图形数据。我的问题是如何在我现有的facebook connect网站上使用该会话。我想通过iphone登录,转到Web服务器,从数据库中存储的用户帐户中获取数据。如果我将访问令牌发送到我的web服务器,我是否需要访问令牌之外的其他信息以确保其有效?@David我想,但我不确定存储在web服务器中的访问令牌是否足以连接。thx,但是如果我只需要访问令牌,为什么我们需要上面的get_user_from_cookie函数?通过我帖子中的代码解析的cookie包含的不仅仅是访问令牌…get_user_from_cookiecookies,app_id,app_secret此方法接受cookie,app id和app secret。它编译应用程序密钥组合并生成签名。然后,它在cookies中搜索存储的签名,并与生成的签名进行比较。如果它们匹配,则检索为该应用程序id存储的值。如果你真的想从iOS中获取用户的访问令牌,并与Python SDK一起使用,那么应该使用facebook.GraphAPI方法。耶,这就是我不理解的……如果你只需要一个访问令牌……为什么fb要麻烦地使用从cookie中获取用户。他们已经有了访问令牌,为什么他们需要经历那么多麻烦。老兄,这就是解释。当您已经拥有访问令牌等时,不需要cookie方法。当您与来自实现cookie的浏览器或应用程序的用户打交道时,可以使用它。