fb ios sdk会话与现有的fb连接网站一起使用

问题描述:

我的fb连接web服务器如何认证通过fb ios sdk登录的用户?我有一个使用Facebook连接的网站。在这里面,我使用的应用程序秘密通过由facebook的通过facebook的Python库的JavaScript SDK创建的cookie来验证用户:fb ios sdk会话与现有的fb连接网站一起使用

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到我的网站。我只是将访问令牌发送到我的网络服务器,并根据访问令牌调用图表(只是绕过上述功能)?如果是这样,那么上述功能提供的所有验证又如何呢?

如果你想使用Facebook IOS API,你需要:

的Alloc和初始化一个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]; 

之后,我能赶上与Access:

facebookObject.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"]; 

facebookObject.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"]; 

一样,你可以保持会话活着,用户输入登录名和密码只有一次。我认为这就是为什么cookies ...

我希望我能理解你的问题。 希望我帮助你。

+0

@ronin,thx但我已经可以通过ios登录并请求图形数据。我的问题是我如何使用我的现有Facebook连接网站的会话。我想通过iphone登录,进入网络服务器,并从存储在我的数据库中的用户帐户抓取数据。如果我将访问令牌发送到我的网络服务器,除了访问令牌是否需要其他信息以确保有效? – prostock 2011-05-11 16:13:48

+0

@David我认为(但我不确定)存储在您的Web服务器中的访问令牌是否足够连接。 – TheRonin 2011-05-12 09:10:22

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

为了访问在Python SDK中的iOS应用程序启动用户会话,只需使用:

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

希望有所帮助。

+0

thx,但是如果访问令牌是我需要的,为什么我们需要上面的get_user_from_cookie函数?由我的帖子中的代码解析的cookie包含的不仅仅是访问令牌... – prostock 2011-05-12 22:53:37

+0

get_user_from_cookie(cookies,app_id,app_secret) 此方法接受cookie,应用程序ID和应用程序密钥。它编译应用程序组合键并生成签名。然后它通过cookie搜索存储的签名并与生成的签名进行比较。如果它们匹配,则检索为该应用ID存储的值。 如果你真的想从iOS获取用户访问令牌,并使用Python SDK,那就是facebook。应该使用GraphAPI()方法。 – 2011-05-13 00:31:22

+0

呀,这就是我不理解....如果你需要的只是一个访问令牌......为什么FB会经历使用get_user_from_cookie的麻烦。他们已经拥有访问令牌,为什么他们需要经历所有这些麻烦。 – prostock 2011-05-13 05:38:24