DotNetOpenAuth 没有从 Facebook 客户端取回电子邮件地址?

DotNetOpenAuth not getting back email address from Facebook client?

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

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

我确实尝试将 "email" 隐式添加到范围。

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。在他们的图形浏览器中测试帐户后,我注意到电子邮件地址由于某种原因没有返回。根据 link 我证明,这是一个已知问题,可能取决于帐户的创建方式或电子邮件地址是否未确认。

原来是Facebook关联的账号。这是一个旧帐户,电子邮件地址未正确确认。即使在确认之后,它仍然没有出现。显然,这是在他们的系统中创建帐户的方式。因此,建议是在需要时向用户索取电子邮件地址。

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

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

string email = me.email;