2011-05-06 33 views
1

我的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到我的網站。我只是將訪問令牌發送到我的網絡服務器,並根據訪問令牌調用圖表(只是繞過上述功能)?如果是這樣,那麼上述功能提供的所有驗證又如何呢?

回答

0

如果你想使用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

0

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