【问题标题】:DotNetOpenAuth not getting back email address from Facebook client?DotNetOpenAuth 没有从 Facebook 客户端获取电子邮件地址?
【发布时间】:2015-01-25 14:59:15
【问题描述】:

我正在为当前项目使用 DotNetOpenAuth 4.3。我相信作为FacebookClient 方法默认范围的一部分,它提供了email 参数。我确认在 RequestAuthroization 期间 Facebook 声明它将提供我的电子邮件地址和个人资料信息。

查看请求结果,我没有在 Provider 信息或 ExtraData 属性中看到返回的电子邮件地址:

我确实尝试将“电子邮件”隐式添加到范围。

public static class AuthenticationHelper
    {
        public static FacebookClient AuthFacebookClient()
        {
            String facebookKey = "XXXXXXXXXX";
            String facebookSecret = "XXXXXXXXXXXXXXX";
            return new FacebookClient(facebookKey, facebookSecret, new []{"email"});
        }
    }

public ActionResult Authentication()
        {
            var authString = Url.Action("AuthenticationResult", "Login",null,"http");
            var authUrl = new Uri(authString);

            var auth = AuthenticationHelper.AuthFacebookClient();

            auth.RequestAuthentication(HttpContext,authUrl);

            //should never reach this point
            return null;
        }

        public ActionResult AuthenticationResult()
        {
            var authString = Url.Action("AuthenticationResult", "Login", null, "http");
            var authUrl = new Uri(authString);
            var res = AuthenticationHelper.AuthFacebookClient().VerifyAuthentication(HttpContext, authUrl);
            return new EmptyResult();
        }

我是否需要做一些不同的事情来确保我能取回电子邮件地址或 Facebook 不会发送此信息?

更新

我刚刚注意到的一件事是我正在使用 DotNetOpenAuth.AspNet.Clients.FacebookClient。查看源后,应在用户名键中填充电子邮件地址。看起来 facebook 正在将用户名设置为我的全名。我不知道为什么。

又一次更新:

我开始认为它可能是Facebook Graph issue。在他们的图形浏览器中测试帐户后,我注意到电子邮件地址由于某种原因没有回来。根据我证明的链接,这是一个已知问题,可能取决于帐户的创建方式或电子邮件地址是否未确认。

【问题讨论】:

    标签: c# .net asp.net-mvc facebook-graph-api dotnetopenauth


    【解决方案1】:

    我在 FacebookClient 上使用以下代码并为我工作 (.net c#)

         var fb = new FacebookClient(access_token.Value);
    dynamic me = fb.Get("/me?fields=email");
    
    string email = me.email;
    

    【讨论】:

      【解决方案2】:

      原来是与 Facebook 关联的帐户。这是一个较旧的帐户,并且未正确确认电子邮件地址。即使确认后,它仍然没有出现。显然,这就是在他们的系统中创建帐户的方式。因此,如果您需要用户的电子邮件地址,建议您询问电子邮件地址。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-01
        • 2020-09-16
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        相关资源
        最近更新 更多