c# - 使用 owin 进行外部身份验证数据检索的问题

标签 c# .net facebook asp.net-mvc-5 owin

任何人都可以提供一个如何从 Facebook 检索个人资料图片 url 的示例吗? 不知何故我不能这样做。我可以检索名字、姓氏、电子邮件、性别,它应该允许检索个人资料图片,但事实并非如此。 claim list 中没有图片之类的东西。 我找不到任何例子。这是我的代码:

启动.Auth.cs

var x = new FacebookAuthenticationOptions();
x.Scope.Add("email");
//x.Scope.Add("picture");
x.AppId = "*";
x.AppSecret = "***";
x.Provider = new FacebookAuthenticationProvider()
{
     OnAuthenticated = async context =>
     {
          context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
          foreach(var claim in context.User)
          {
               var claimType = string.Format("urn:facebook:{0}", claim.Key);
               string claimValue = claim.Value.ToString();
               if(!context.Identity.HasClaim(claimType, claimValue))
                    context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
          }
     }
};

x.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
app.UseFacebookAuthentication(x);

编码我如何检索一些数据:

var loginInfo = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var firstNameClaim = loginInfo.Claims.First(c => c.Type == "urn:facebook:first_name");
var lastNameClaim = loginInfo.Claims.First(c => c.Type == "urn:facebook:last_name");
var gender = loginInfo.Claims.First(c => c.Type == "urn:facebook:gender");

有什么想法吗?我使用 Facebook SDK for .NET 获得了所需的结果,但我很好奇如何在不使用 Facebook SDK for .NET 的情况下获得相同的结果。希望社区能在这方面提供帮助。

最佳答案

似乎您无法将图片 url 作为带参数的对象获取,因为每次用户更改其个人资料图片时图片 URL 都会更改,因此存储静态 url 没有任何意义。

对于我的解决方案,我写了一个获取个人资料图片动态 url 的方法,代码如下:

private string GetFacebookProfilePicture(ClaimsIdentity externalInfoSoruce) {
        var facebookUserID = externalInfoSoruce.Claims.First(c => c.Type == "urn:facebook:id").Value;
        string profilePicturePath = string.Format("http://graph.facebook.com/{0}/picture?type=large", facebookUserID);
        return profilePicturePath;
    }

现在每次我想向用户展示他的个人资料图片时,我都可以将该链接插入到 <img>源参数。每次用户登录时,照片都会自动更新。

关于c# - 使用 owin 进行外部身份验证数据检索的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433152/

相关文章:

.net - 如何跟踪任何子控件何时在 WinForms 中获得或失去焦点?

c# - 使用 Activator.CreateInstance 创建的对象

c# - 数据读取器内的数据读取器

c# - EF Core EnableSensitiveDataLogging 无法按预期工作

c# - 如何在 WinSCP C# 中使用 Session.GetFiles 下载单个文件

c# - 使用 DbGeography 的 MultiPolygon 和 Polygon 的交集

facebook - 如何从 Facebook Unity SDK 获取用户名

Facebook 对域中多个页面的点赞

ios - Facebook 共享对话框在哪个 iOS 中工作?

javascript - 在 C# 中重现 JS PBKDF2 哈希