Facebook MVC 5 ASP.NET身份 - 某些用户的电子邮件为空

Yar*_*evi 7 claims-based-identity facebook-authentication asp.net-mvc-5 asp.net-identity

这是我试图解决一个月的问题.(尝试过任何可能的文章/代码).

在ExternalLoginCallback操作中,AuthenticationManager.GetExternalLoginInfoAsync()返回一个有效对象(包含所有提供者详细信息),但某些Facebook用户的电子邮件为空.

对于绝大多数Facebook登录电子邮件是预置.但是对于大约30%的登录,我在这个过程中得到了一个例外,因为电子邮件是空的.

幸运的是,不久之前我创建了一个Facebook用户来重现这个问题.我在localhost中创建了一个无菌的测试环境,实际上该用户的电子邮件是空的,其他用户也可以.

*有了这个Facebook用户,我可以在任何大型商业网站(例如IMDB)中登录.

1)我用VS2013创建了一个干净的MVC 5项目.

2)更新了所有与认证有关的包:

<package id="Microsoft.AspNet.Identity.Core" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.EntityFramework" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Cookies" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Facebook" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OAuth" version="3.0.0" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
Run Code Online (Sandbox Code Playgroud)

3)取消标记Startup.Auth.cs中的facebook部分并添加以下内容:

var facebookAuthOptions = new FacebookAuthenticationOptions();
facebookAuthOptions.AppId = "***";
facebookAuthOptions.AppSecret = "***";
facebookAuthOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookAuthOptions);
Run Code Online (Sandbox Code Playgroud)

更新

在该Facebook用户的设置屏幕中,我尝试将电子邮件更改为另一封电子邮件,然后将其更改回来.现在电子邮件就好了!! 怎么会这样 ?


Dar*_*rov 3

如果该用户没有主电子邮件地址,则可能会发生这种情况。受影响的用户必须删除电子邮件,保存设置,然后重新添加地址,重新确认,然后将其设为主要地址。这在其他网站(例如 IMDB)上有效的原因可以解释为该网站不需要email从 FB 返回地址。它只使用所提供的任何信息。