2015-02-06 44 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