Ссылка MVC5 Null с входом в facebook

Я получаю исключение нулевой ссылки иногда, когда я вхожу в систему с помощью facebook с помощью контроллера учетных записей ASP.NET mvc5.


Вот метод вымирания:

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

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


Edit

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

Изменить 2

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

Изменить 3

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

Ответ 1

Быстрое решение.

Вы должны очистить сеанс перед 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 }));
}

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

Я также применил: Лучший способ в asp.net заставить https для всего сайта?

Я также добавил в файл 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 после развертывания не идеальна, это был единственный сайт на машине, поэтому мне не пришлось беспокоиться о том, чтобы удалить другой сайт.

Ответ 5

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

Ответ 6

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

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

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

Ошибка источника:

Строка 232: публичная асинхронная задача ExternalLoginCallback (строка returnUrl) Строка 233: { Строка 234: var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); Строка 235: if (loginInfo == null) Строка 236: {

Привет, Раньше у меня такая же ошибка. Я разрешаю его через

Инструменты- > Диспетчер пакетов библиотек- > Управление пакетами Nuget для решений → Microsoft.owin.security.Facebook

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