某些用户的电子邮件为空
这是我现在想解决一个月的问题。 (尝试过任何可能的文章/代码)。
在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