Пример 2. Логин через Ajax

Второй пример будет представлять собой реализацию авторизации пользователя без перезагрузки страницы, с использованием только Ajax-запросов. Кроме того, сделаем так, чтобы возможность произвести вход в систему была доступна с любой страницы проекта.

Первоначально переопределим действие LogOn в контроллере Account так, чтобы поддержать возможность произведения входа в систему черезе Ajax-запросы (листинг 7.2).

Листинг 7.2. Переопределение действия LogOn

public ActionResult LogOn(string userName,

          string password,

          bool rememberMe,

          string returnUrl)

{

  if (Request.IsAjaxRequest())

  {

    var result = new AjaxResult();

    if (!ValidateLogOn(userName, password))

    {

      result.IsSuccess = false;

      result.ErrorString = "введен неверный логин или пароль";

      return Json(result);

    }

    FormsAuth.SignIn(userName, rememberMe);

    result.IsSuccess = true; return Json(result);

  }

  else

  {

    if (!ValidateLogOn(userName, password))

    {

      return View();

    }

    FormsAuth.SignIn(userName, rememberMe);

    if (!String.IsNullOrEmpty(returnUrl))

    {

      return Redirect(returnUrl);

    }

    else

    {

      return RedirectToAction("Index", "Home");

    }

  }

}

Обратите внимание на выделенный в листинге 7.2 фрагмент. В нем используется метод Request.IsAjaxRequest() для определения типа запроса. Если запрос был произведен с помощью Ajax, то выполнятся дальнейшая обработка и возврат результата в виде JSON-данных с булевым значением, описывающим, произведен ли вход в систему, и строкой описания ошибки, если она возникла. Когда запрос не является Ajax-запросом, выполняется предыдущая логика.