Facebook MVC 5 ASP.NET Identity — электронная почта недействительна для некоторых пользователей

Это проблема, которую я пытаюсь решить уже месяц. (пробовал любую возможную статью/код).

В действии 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 я попытался изменить адрес электронной почты на другой адрес электронной почты, а затем изменить его обратно. Теперь электронная почта приходит просто отлично! Как это могло произойти ?



person Yaron Levi    schedule 23.10.2014    source источник


Ответы (2)


Это может произойти, если у этого пользователя нет основного адреса электронной почты. Пострадавший пользователь должен удалить адрес электронной почты, сохранить настройки, затем повторно добавить адрес, повторно подтвердить его, а затем сделать его основным. Причина, по которой это работает на других сайтах, таких как IMDB, может быть объяснена тем фактом, что этот сайт не требует возврата адреса email из FB. Он просто использует любую предоставленную информацию.

person Darin Dimitrov    schedule 26.10.2014
comment
Но на странице настроек профиля пострадавшего пользователя в Facebook я ясно вижу, что для него определен основной адрес электронной почты . - person Yaron Levi; 26.10.2014
comment
Вы пробовали мои предложенные шаги? У меня была такая же проблема. Также возможно, что ФБ просто не вернет адрес email для некоторых пользователей без объяснения причин, даже если вы запросили область действия email. К сожалению, с FB вы не можете быть на 100% уверены, что получите адрес электронной почты пользователя. - person Darin Dimitrov; 26.10.2014
comment
Я уже сделал шаги, о которых вы упомянули: у меня был пострадавший пользователь, который воспроизводит проблему в моей руке. Зайдя в него я вижу первичную почту. Теперь я удалил письмо и добавил его снова. Теперь пользователя это не касается, и электронная почта приходит нормально. Проблема в том, что я все еще вижу довольно большое количество пользователей на моем веб-сайте PROD, которые получают ошибку в процессе, потому что их электронная почта становится нулевой. - person Yaron Levi; 26.10.2014
comment
Ну, я боюсь, что вы мало что можете сделать из кода приложения ASP.NET MVC на стороне клиента. Этим пользователям нужно будет исправить свои учетные записи, как вы сделали это с тестовой учетной записью. Например, если электронная почта отсутствует, вы можете напечатать сообщение для пользователя, объясняющее шаги, которые ему необходимо выполнить, чтобы иметь возможность войти на ваш сайт. - person Darin Dimitrov; 26.10.2014
comment
Хорошо, спасибо за помощь. Я позволю награде продолжаться еще немного, может быть, появится кто-то с волшебным ответом. Если нет, я передам награду вам. - person Yaron Levi; 26.10.2014

Разрешение на вход в Facebook действует по-разному в зависимости от способа создания профиля в Facebook.

Даже если вы запросите разрешение электронной почты, это не гарантирует, что вы получите адрес электронной почты. Например, если кто-то зарегистрировался на Facebook, указав номер телефона вместо адреса электронной почты, поле электронной почты может быть пустым.

Кроме того, теперь у пользователей больше контроля и варианты, что включать при регистрации.

Источник

person DSR    schedule 23.10.2014
comment
Этот пользователь Facebook имеет действующий адрес электронной почты и одобрил разрешения приложения для электронной почты. - person Yaron Levi; 23.10.2014