带有 OAuth2 的 Facebook v2.4 停止工作,仅获取名称和 ID

2024-02-26

从 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)来做到这一点......


Facebook 在 2.4 中做了一些改变。现在默认情况下您只能获取这两个字段,如果您想要任何其他字段,则必须明确请求它们:

声明字段 为了尝试提高移动网络的性能,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 https://developers.facebook.com/docs/apps/changelog#v2_4_changes

不幸的是,我不确定如何为您正在使用的库翻译它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 OAuth2 的 Facebook v2.4 停止工作,仅获取名称和 ID 的相关文章

随机推荐