2015-02-06 48 views
-1

我正在用ASP.NET MVC 5和Identity构建一个应用程序。
到目前为止登录工作正常。
这里AUTH:
如何在ASP.NET中获取Facebook好友列表?

var fb = new FacebookAuthenticationOptions(); 
fb.Scope.Add("email"); 
fb.Scope.Add("friends_about_me"); 
fb.Scope.Add("friends_photos"); 
fb.AppId = ""; 
fb.AppSecret = ""; 
fb.Provider = new FacebookAuthenticationProvider() { 
    OnAuthenticated = async FbContext => { 
     FbContext.Identity.AddClaim(
      new System.Security.Claims.Claim("FacebookAccessToken", FbContext.AccessToken)); 
    } 
}; 
fb.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie; 
app.UseFacebookAuthentication(fb); 

我试图让好友列表。我一直在寻找一些例子,但没有一个是与这个版本的MVC 5一起工作。
我的问题是。我该如何取得这个版本的所有朋友?

我不想使用JavaScript API,我想要在C#中的所有代码,然后发送到视图。

我想我只需要重写登录并在会话中存储访问令牌,然后只需拨打var client = new FacebookClient(TOKEN);
那么我该如何重写登录?

回答

1

你已经拥有了你需要的一切。您设置的OnAuthenticated回调会添加包含Facebook访问令牌的声明。你只需要拉要求用户:

var identity = (ClaimsIdentity)User.Identity; 
var facebookClaim = identity.Claims.FirstOrDefault(c => c.Type == "FacebookAccessToken"); 
if (facebookClaim != null) 
{ 
    // access facebook API with `facebookClaim.Value` 
} 

,如果它存在,那么你可以使用Facebook的API,从而为通过像HttpClient标准的HTTP调用自己的朋友拉。

+0

完美。它的工作原理是添加'var client = new FacebookClient(facebookClaim.Value);动态我= client.Get(“我”);' 但我怎么能列出所有的朋友。 '我/朋友'不起作用 – BrunoRamalho 2015-02-06 20:16:25

+0

您需要查阅API文档和/或客户端文档。 – 2015-02-06 22:16:38

+0

@bramalho:使用API​​ v2,您不会再获得用户的所有朋友,只有那些也是该应用的用户。 (是的,这已经被讨论了无数次,并且在FB文档和更新日志中也有清楚的描述...) – CBroe 2015-02-07 02:21:06