Запустите Javascript после аутентификации вместо перенаправления - PullRequest
1 голос
/ 07 февраля 2011

Короткая версия: Какой лучший способ остаться на той же странице, чтобы выполнить второй вызов AJAX после получения ответа AJAX ASP.NET Membership Authentication?

Длинная версия: представьте веб-программу Paintвстроенный в ASP.NET MVC.Пользователь рисует картинку, в течение которой время сеанса истекло.Пользователь нажимает «сохранить» и получает диалоговое окно AJAX: «Время сеанса истекло. Пожалуйста, введите свои учетные данные ниже».(См. Проверка подлинности с помощью jQuery Forms с помощью ASP.NET MVC , чтобы узнать, как выполнить проверку подлинности AJAX.) После ввода действительных учетных данных пользователь проходит повторную проверку подлинности.

Как правило, на этом этапе пользователиперенаправляется на returnUrl, что видно по сигнатуре метода входа MVC по умолчанию:

public ActionResult LogOn(LogOnModel model, string returnUrl)

Однако в этом случае я хотел бы остаться на той же странице и вместо этого сделать AJAX-вызов моего обработчика,SaveArt(), который запишет работу пользователя в базу данных.Я мог бы похитить returnUrl, чтобы она содержала имя последующей функции Javascript, которую я хотел бы вызвать, но единственный способ, которым я могу думать, чтобы выполнить ее из клиента, - это страшный eval, который совсем некажется безопаснымЕсть ли другой способ полностью AJAXify этого процесса?В чем опасность использования eval здесь для запуска функции, имя которой возвращается сервером?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Если вы используете Ajax-запрос для входа в систему, вы можете изменить accountcontroller для его обнаружения с помощью Request.IsAjaxRequest () (или одним из нескольких других методов) и вернуть объект json с результатом запроса на вход в систему.вместо перенаправления.Оттуда вам просто нужно обработать этот объект для отображения результата.

- исправленный ответ -

Что вам нужно сделать, это проверить код ответа от вызова ajax, прежде чем продолжить ввсе, что вы хотели сделать. Метод jQuery 1.5 ajax () позволяет вам сделать это:

$.ajax({
  statusCode: {404: function() {
    alert('page not found');
  }
});

В вашем случае, если вы действительно используете атрибут [Authorize], вы должны обработать401 код состояния.Скорее всего, там, где вы бы показать свой диалог входа в систему.Когда вы создаете экземпляр диалогового окна входа в систему, передается закрытие, которое снова вызывает функцию SaveArt ().

Надеемся, это будет более полезным для вас.

2 голосов
/ 07 февраля 2011

"Чад Рупперт" ответ правильный.Но если вы не понимаете, пожалуйста, следуйте приведенному ниже алогриту.

1) объявите функцию javascript, которая делает вызов AJAX для аутентификации с параметром i) имя пользователя ii) пароль iii) функция обратного вызова

2) В ответе на вызов AJAX, вероятно, вы знаете результат проверки, является ли пользователь / psd правильным или нет.

3) Если проверка прошла, тогда вызовите функцию обратного вызова (функция обратного вызова замечает, но ваш SAVE())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...