Asp.net身份获取facebook信息

时间:2014-09-21 09:40:32

标签: asp.net asp.net-mvc-4 oauth-2.0 asp.net-identity owin

我已在网上搜索以下代码以获取代码信息,但我有一些问题

1)facebook.Options.Scope.Add("email"):如何确定将哪些内容放入电子邮件中?例如,如果我需要名字或名字,我该怎么办?

2)ext.Claims.First(x => x.Type.Contains("email")).Value; 我如何在这里确定电子邮件?让我们说我想要名字,我怎么知道名字是firstname的名字的第一个名字

 var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
            {
                AppId = "AppId",
                AppSecret = "AppSecret"
            };
            facebookOptions.Scope.Add("email");
            app.UseFacebookAuthentication(facebookOptions);

 ClaimsIdentity ext = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
            var email = ext.Claims.First(x => x.Type.Contains("email")).Value;

1 个答案:

答案 0 :(得分:1)

您无法直接从通过facebookOptions范围添加的声明中获取所有Facebook个人资料信息。您必须添加如下所示的范围并使用FacebookClient作为解释。

var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
            {
                AppId = "AppId",
                AppSecret = "AppSecret"
            };
            facebookOptions.Scope.Add("email");            
            facebookOptions.Scope.Add("public_profile");
            app.UseFacebookAuthentication(facebookOptions);

然后您可以使用FacebookClient获取Facebook用户信息。

[Authorize]
public async Task<ActionResult> FacebookInfo()
{
    var claimsforUser = await UserManager.GetClaimsAsync(User.Identity.GetUserId());
    var access_token = claimsforUser.FirstOrDefault(x => x.Type == "FacebookAccessToken").Value;
    var fb = new FacebookClient(access_token);
    dynamic myInfo = fb.Get("/me"); **// Check this with Facebook api to get profile information.**

} 

请注意:如果您只需要获取Facebook用户的全名,然后检查您的声明,您就会看到用户的全名。

More information

希望这有帮助,