某些用户的电子邮件为空

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

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

对于大多数Facebook登录电子邮件是预设的。 但是,对于约30%的登录,我在该过程中收到异常,因为电子邮件为空。

幸运的是,前段时间我创建了一个重现问题Facebook用户 。 我在本地主机上创建了一个无菌的测试环境,实际上这个用户的电子邮件为空,其他用户也可以。

*有了这个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" />

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

var facebookAuthOptions = new FacebookAuthenticationOptions();
facebookAuthOptions.AppId = "***";
facebookAuthOptions.AppSecret = "***";
facebookAuthOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookAuthOptions);

更新

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



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


使用Facebook登录权限的行为在创建Facebook配置文件的方式上有所不同。

即使您要求电子邮件许可,也不保证您会收到电子邮件地址。 例如,如果有人使用电话号码而不是电子邮件地址注册Facebook,则电子邮件字段可能为空。

此外,现在用户在注册期间拥有更多的控制权和选择权。

资源

链接地址: http://www.djcxy.com/p/82223.html

上一篇: Email is null for certain users

下一篇: Dynamodb ConditionalCheckFailedException on read / update operation