2013-11-24 3 views
20

Im получение нулевой ссылки исключение иногда, когда я войти в систему с Facebook, используя из коробки ASP.NET mvc5 составляет контроллер.MVC5 Null Ссылка с facebook логин


Вот метод умирающей:

public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
{ 
     // Crashes on this line 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     if (loginInfo == null) 
     { 
      return RedirectToAction("Login"); 
     } 
} 

Я не уверен, как отладить это. Точка прерывания и замалчивание, хотя код не помогает ... В итоге я просматриваю страницу Error.cshtml. Ошибка в этой точке - это простое исключение нулевой ссылки на объект, а внутреннее исключение также равно нулю.


Редактировать

Я обновил до последней Owins через NuGet, без изменений.

Edit 2

взглянули в стельку, Facebook возвращается на 200 с тем, что выглядит как правильный профиль в формате JSON.

Редактировать 3

Так странно. Im тестирование с 3 счетами facebook. Два аккаунта работают нормально, 1 нет. Ошибка, возвращаемая с 200. Я удалил ссылки на приложения в facebook .. Я получаю окно подтверждения приложения, я нажимаю ok, и он умирает ... так странно.

+2

Получил эту проблему также. Но каждый раз, когда я перезапускал IIS, он исправлял проблему. – Lee

ответ

32

Быстрое решение на данный момент.

Вы должны очистить сеанс перед ExternalLoginCallback. Пример.

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult ExternalLogin(string provider, string returnUrl) 
{ 
    ControllerContext.HttpContext.Session.RemoveAll(); 

    // Request a redirect to the external login provider 
    return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); 
} 
+0

Это, похоже, работает, чтобы исправить проблему входа в систему OWIN, когда она перестает работать примерно через день. Я не понимаю, почему это работает. –

+0

Это работает и для меня, я думаю, что это замечательное решение. Во всяком случае, похоже, в системе asp.net mvc Identity имеется большая ошибка. Примечание: ControllerContext.HttpContext.Session.RemoveAll(); необходимо добавить также в ManageController-> LinkLogin, если вы хотите, чтобы связать внешнюю учетную запись с вашей текущей учетной записью. –

+0

Человек, ты так блестяще разобрался! Никогда не ожидал, что сессия будет проблемой! Застрял в этой ошибке OWIN за весь день фриггена! Большое спасибо за обмен. – Hajjat

0

Моя аналогичная проблема была с Google, я еще не занимался FB. Он работал нормально на месте, но удалялся, когда я публиковал на сервере.

В дополнение к тому, что Ли упоминал с добавлением: ControllerContext.HttpContext.Session.RemoveAll();

Я также применил: Best way in asp.net to force https for an entire site?

Я также добавил в файл Startup.Auth.cs:

var gProvider = new GoogleAuthenticationProvider { OnAuthenticated = context => Task.FromResult(0) }; 
var gOptions = new GoogleAuthenticationOptions { Provider = gProvider, SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie, AuthenticationMode = AuthenticationMode.Active }; 
app.UseGoogleAuthentication(gOptions); 

После того как я развертывается мой код, я также перезапустить IIS, приложение бассейн, и веб-сайт , Хотя я понимаю, что перезагрузка IIS после развертывания не идеальна, это был единственный сайт на машине, поэтому мне не пришлось беспокоиться о том, чтобы удалить другой сайт.

0

У меня была учетная запись на facebook, у которой не было набора имен пользователей, который давал мне сообщение об исключении исключительной ситуации в этой строке кода. Кажется, проблема в том, что некоторые свойства ожидаются в учетной записи при возврате информации обратно в ваше приложение, и если эти свойства отсутствуют, он бомбит. В моем случае установка имени пользователя в facebook устранила проблему.

2

Очистка сессии в соответствии с ответом Ли (отмеченная как ответ) разрешила эту проблему для нас тоже.У нас есть довольно стандартное веб-приложение ASP.NET MVC 4 с поддержкой Google и Facebook, также включенное на сайтах Azure, и это приводило нас в бешенство.

Он прекратит работать каждые 12-24 часа или где-нибудь в течение этого периода времени, и перезапуск веб-сайта заставит его работать в течение следующего периода, пока это не произойдет снова.

Я действительно задаюсь вопросом, почему очистка сеанса работает ... это немного пахнет ошибкой рамки (или, может быть, ошибкой Azure в нашем случае), если я не пропущу что-то.

0

Ссылка на объект не установлена ​​в экземпляр объекта.

Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.NullReferenceException: Ссылка на объект не установлена ​​в экземпляр объекта.

Источник ошибки:

Линия 232: открытая асинхронной Task ExternalLoginCallback (строка ReturnUrl) Строка 233: { Линия 234: вар loginInfo = ждут AuthenticationManager.GetExternalLoginInfoAsync(); Line 235: если (loginInfo == NULL) Строка 236: {

Привет, Раньше я иметь такую ​​же error.I решить через

Tools-> Библиотека Пакет Manager-> Управление NuGet Пакеты решений ->Microsoft.owin.security.Facebook

Просто добавьте, что Referance вы не получите ошибку сейчас

6

Обновления моих компонентов Owin от версии 3.0.1 до версии 3.1.0 исправили (до сих пор). 3.1.0 был выпущен 10 апреля 2017.

+0

Это решение сработало для меня, спасибо! –

Смежные вопросы