从 facebook API v2.3 到 v2.4 发生了一些变化 - 使用 2.4 后我只能获取名称和 ID,
我看到一些帖子谈论添加“?fields=scopes...”,但这对我来说是一个真正的谜 - 我试图了解如何发送这些范围字段...
这是我的代码:
var facebookAuthOptions = new FacebookAuthenticationOptions();
facebookAuthOptions.AppId = facebookAuthAppId;
facebookAuthOptions.AppSecret = facebookAuthAppSecret;
facebookAuthOptions.Scope.Add("email");
facebookAuthOptions.Scope.Add("user_birthday");
facebookAuthOptions.Scope.Add("public_profile");
facebookAuthOptions.Provider = new FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
// https://stackoverflow.com/questions/25966530/asp-net-mvc-5-1-c-sharp-owin-facebook-authentication-or-login-ask-for-birthday/25967936#25967936
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);
var claimValue = claim.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
}
return Task.FromResult(0);
}
};
app.UseFacebookAuthentication(facebookAuthOptions);
提前致谢。
更新 1:我尝试像这样注入范围字段:
facebookAuthOptions.UserInformationEndpoint += "?fields=email,user_birthday,first_name,last_name";
但还是不行...
更新2:我发现这个帖子 https://stackoverflow.com/questions/31714500/access-email-address-in-the-oauth-externallogincallback-from-facebook-v2-4-api-i/31715332#31715332这使得可以收到电子邮件,但我必须安装额外的Facebook SDK for .NET https://github.com/facebook-csharp-sdk/facebook-csharp-sdk我宁愿避免...也发现这个帖子 https://stackoverflow.com/questions/7999934/facebook-c-sharp-sdk-problems-getting-user-email/8013211#8013211显示了如何提取更多值,例如生日(在 facebook API v4.3 中,我必须发送生日而不是 user_birthday)
动态 myInfo = fb.Get("/me?fields=电子邮件,生日");
我仍在寻找一种通过标准 Oauth2 方法发送范围值的方法...
更新3:
我设法使用 Facebook .NET SDK 获取更多信息 -https://stackoverflow.com/a/31933544/3187389 https://stackoverflow.com/a/31933544/3187389但仍然希望在不使用 Facebook .NET SDK 的情况下无法使用标准 Oauth2(和 Owin)来做到这一点......