从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:我发现this post可以收到电子邮件,但是我必须安装额外的Facebook SDK for .NET,我希望避免...还会找到显示的this post如何提取像生日这样的更多值(在facebook API v4.3中我必须发送生日而不是user_birthday) dynamic myInfo = fb.Get(" / me?fields = email,birthday"); 我还在寻找通过标准Oauth2方法发送范围值的方法......
更新3: 我设法使用Facebook .NET SDK获取更多信息 - https://stackoverflow.com/a/31933544/3187389 但是仍然希望不使用标准的Oauth2(和Owin)而不使用Facebook .NET SDK ...
答案 0 :(得分:1)
声明字段 要尝试提高移动网络的性能,v2.4中的节点和边缘要求您明确请求GET请求所需的字段。例如,GET /v2.4/me/feed默认不再包含喜欢和评论,但GET /v2.4/me/feed?fields=comments,likes将返回数据。有关详细信息,请参阅有关如何请求特定字段的文档。
https://developers.facebook.com/docs/apps/changelog#v2_4_changes
不幸的是,我不确定如何为您正在使用的图书馆翻译它。
答案 1 :(得分:1)
解决了!终于......并使用新的facebook API v2.4
所以也许我可以拯救别人6个小时: - )
您需要安装适用于.NET的Facebook SDK
这就是我修复它的方法:
// Use Facebook SDK for .NET to get more specific data (https://github.com/facebook-csharp-sdk/facebook-csharp-sdk)
var identity = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
var facebookAccessToken = identity.FindFirstValue("FacebookAccessToken");
var fb = new FacebookClient(facebookAccessToken);
dynamic facebookInfo = fb.Get("/me?appsecret_proof=YourFacebookAppSecretProof&fields=email,birthday,gender");
signInInfo.Email = facebookInfo.email;
更新:现在还需要传入appsecret_proof(添加到代码段)