MVC - время ожидания проверки подлинности формы страницы - PullRequest
1 голос
/ 30 июля 2011

мы разрабатываем приложение MVC3 таким образом, что большинство наших методов действий вызываются через вызовы ajax и возвращают частичные представления.мы сталкиваемся с ситуацией, когда нам нужно определить, вызван ли метод действия из таймаута проверки подлинности формы.

public ActionResult LogOn()
{ 
 // I want to return View("LogOn"); if the call is coming from 
 // Form Authentication time out                       
    return PartialView(Model);
}

вот мой web.config выглядит так:

<authentication mode="Forms">
  <forms loginUrl="~/Home/LogOn" timeout="20" />
</authentication>

Оцените ваш вклад.

Ответы [ 3 ]

1 голос
/ 01 августа 2011

Ваше действие никогда не будет выполнено, если истек срок действия файла cookie аутентификации. Модуль проверки подлинности форм напрямую перенаправляет на страницу входа. Одна из возможностей обнаружить это происходит из сценариев клиента - установить настраиваемый заголовок HTTP в действии контроллера, обслуживающего эту страницу входа:

public ActionResult LogOn()
{
    var model = ...
    Response.AppendHeader("X-LOGON", "true");
    return View(model);
} 

, а затем при выполнении запроса AJAX вы можете использовать метод getResponseHeader для объекта XHR, чтобы проверить, был ли установлен заголовок X-LOGON, что означает, что сервер перенаправлен на страницу входа. В этом случае в вашем успешном обработчике AJAX вместо простого внедрения ответа сервера в DOM или использования возвращенного JSON вы можете показать некоторое предупреждающее сообщение, информирующее пользователя о том, что время его сеанса аутентификации истекло, и ему необходимо снова войти в систему. Другая возможность - автоматически перенаправить его на страницу входа, используя метод window.location.href:

$.ajax({
    url: '/home/some_protected_action',
    success: function (data, textStatus, XMLHttpRequest) {
        if (XMLHttpRequest.getResponseHeader('X-LOGON') === 'true') {
            // the LogOn page was displayed as a result of this request 
            // probably timeout => act accordingly
        }
    }
});
0 голосов
/ 30 июля 2011

Нет простого способа, но если вы примените Post-Redirect-Get, я не уверен, что у вас возникнет эта проблема.

0 голосов
/ 30 июля 2011

Невозможно с сервера отличить пользователя, загружающего страницу в обычном режиме, от обновления страницы.

Есть способы определить разницу между обычным запросом и запросом AJAX, но это не похоже на то, что вы просите.

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