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;
我正在为当前项目使用 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;