我正在使用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,我就可以获取有关其帐户的信息?
我只是想确保自己没有做错任何事,而且我不会在制作中遇到麻烦。
答案 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>;