2012-12-07 30 views
0

我正在使用Facebook C# SDK,並試圖弄清楚它是如何工作的。實際上我用一個AJAX Web方法查找基於經過驗證的用戶ID,它看起來像這樣的Facebook帳戶細節:Facebook C#SDK是否依賴於服務器上的cookie?

if (response.status === "connected") 
{ 
    KitchenPC.LogonFB(response.authResponse.userID, checkResult, facebookError); 
} 

在服務器端,LogonFB Web方法不一樣的東西:

Client = new FacebookClient(applicationId, applicationSecret); 
var result = Client.Get(path) as IDictionary<string, object>; 

UserId = Int64.Parse((String)result["id"]); 
Name = result["name"] as String; 
FirstName = result["first_name"] as String; 
LastName = result["last_name"] as String; 
Location = result.ContainsKey("location") ? result["location"] as String : ""; 
Gender = result.ContainsKey("gender") ? result["gender"] as String : ""; 
Email = result["email"] as String; 

其中path是從客戶端傳入的用戶標識。

我的問題:

我從ASP.NET Web服務切換到WCF,和WCF不支持cookie。事實上,在WCF管道中,HttpContext.Current將爲空。我的印象是,Facebook C#SDK 取決於上的fbm_fmsr_ cookie傳入請求中,這將用於驗證與Facebook服務器的會話。不過,令我驚訝的是,.Get()調用仍然有效,並返回用戶信息。我還挖掘了SDK源代碼,並在其中找到了對HttpContext.Current的引用。

Facebook C#SDK是否完全獨立於Cookie工作?這是否意味着我需要的只是用戶的Facebook ID,並且只要他們以前批准了我的應用ID,我就可以獲取有關其帳戶的信息?

我只是想確保我沒有做錯任何事,而且我不會在生產中遇到麻煩。

回答

1

當您傳遞帶appId和appSecret的構造函數時,它會使用string.Concat(appId, '|', appSecret)自動將訪問令牌設置爲應用訪問令牌。該構造函數已在更新版本的sdk中刪除。 https://github.com/facebook-csharp-sdk/facebook-csharp-sdk/issues/103

如果您不想訪問令牌,請將其設置爲空。

Client = new FacebookClient(applicationId, applicationSecret); 
Client.AccessToken = null; 
var result = Client.Get(path) as IDictionary<string, object>; 
+0

那麼SDK是否需要客戶端cookie工作? –

+0

沒有。它基於Client Framework,因此不存在System.Web.dll引用。它具有解析已簽名請求的功能,但即使如此,您仍然需要手動通過signed_request。 fb.ParseSignedRequest(Request.Params [「signed_request」],「appSecret」)。它不支持解析cookie。 – prabir

+0

好的,太好了。這回答了我的問題! –

相關問題