Facebook C#SDK是否依赖于服务器上的cookie?

时间:2012-12-07 03:15:01

标签: asp.net facebook facebook-c#-sdk

我正在使用Facebook C# SDK,并试图弄清楚它是如何工作的。我实际上使用AJAX Web方法根据经过身份验证的用户ID查找Facebook帐户详细信息,如下所示:

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是从客户端传入的用户ID。

我的问题:

我正在从ASP.NET Web Service切换到WCF,而WCF不支持cookie。实际上,HttpContext.Current在WCF管道中将为null。我认为Facebook C#SDK 依赖对请求传递的fbm_fmsr_ cookie,这将用于验证与Facebook的会话服务器。但是,令我惊讶的是,.Get()调用仍然有效,并返回用户信息。我还挖掘了SDK源代码,在其中没有找到HttpContext.Current的引用。

Facebook C#SDK是否完全独立于Cookie?这是否意味着我所需要的只是用户的Facebook ID,只要他们之前已经批准了我的应用ID,我就可以获取有关其帐户的信息?

我只是想确保自己没有做错任何事,而且我不会在制作中遇到麻烦。

1 个答案:

答案 0 :(得分:1)

使用appId和appSecret传递构造函数时,它会使用string.Concat(appId, '|', appSecret)自动将访问令牌设置为app访问令牌。该构造函数已在较新版本的sdk中删除。 https://github.com/facebook-csharp-sdk/facebook-csharp-sdk/issues/103

如果您不想要访问令牌,请将其设置为null。

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