Это проблема, которую я пытаюсь решить уже месяц. (пробовал любую возможную статью/код).
В действии ExternalLoginCallback AuthenticationManager.GetExternalLoginInfoAsync() возвращает действительный объект (со всеми данными поставщика), но адрес электронной почты недействителен для определенных пользователей Facebook.
Для подавляющего большинства пользователей Facebook указан адрес электронной почты для входа. Но примерно для 30% входов в систему я получаю исключение из-за отсутствия адреса электронной почты.
К счастью, некоторое время назад я создал пользователя Facebook, который воспроизвел проблему. Я создал стерильную тестовую среду на локальном хосте, и действительно, электронная почта для этого пользователя недействительна, а для других пользователей — в порядке.
* С этим пользователем Facebook я могу без проблем войти на любой крупный коммерческий сайт (например, IMDB).
1) Я создал чистый проект MVC 5 с VS2013.
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) Сняли пометку с раздела facebook в Startup.Auth.cs и добавили следующее:
var facebookAuthOptions = new FacebookAuthenticationOptions();
facebookAuthOptions.AppId = "***";
facebookAuthOptions.AppSecret = "***";
facebookAuthOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookAuthOptions);
Обновлять
На экране настроек этого пользователя Facebook я попытался изменить адрес электронной почты на другой адрес электронной почты, а затем изменить его обратно. Теперь электронная почта приходит просто отлично! Как это могло произойти ?