Как легко перенаправить, если не аутентифицироваться в MVC 3?
Я новичок в ASP.NET, и я пытаюсь найти способ легко перенаправить не прошедшего проверку пользователя с любой страницы сайта на страницу входа в систему. Я бы предпочел не поместить следующий код в каждую функцию HTTP GET, если есть еще одна опция.
if (!Request.IsAuthenticated)
{
return RedirectToAction("LogOn", "Account");
}
Ответы
Ответ 1
Отметьте свой контроллер атрибутом [Authorize]
http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
Смотрите ваш web.config, по умолчанию вы должны включить аутентификацию форм authentication mode="Forms"
http://msdn.microsoft.com/en-us/library/eeyk640h.aspx
Также рассмотрите этот вопрос Авторизация ASP.NET MVC
Если вы хотите, чтобы пользовательское поведение авторизации выглядело здесь Настройка авторизации в ASP.NET MVC
Ответ 2
Вы можете поместить атрибут [Authorize]
для каждого действия, которое должно быть аутентифицировано.
Кроме того, убедитесь, что этот раздел определен в вашем Web.Config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Ответ 3
Я просто попробовал это:
<!-- using custom auth with MVC redirect -->
<authentication mode="None">
<forms loginUrl="~/Home/Index"/>
</authentication>
и он все еще работает, хотя я использую пользовательский auth. Однако не уверен в тайм-ауте - будет [Авторизовать] по-прежнему использовать значение по умолчанию для Forms Auth или он не будет управлять таймаутами вообще (предпочтительное поведение для пользовательского auth).
Ответ 4
Я использовал приведенный ниже фрагмент кода и нашел его очень элегантным, не требуя писать какие-либо инструкции перенаправления. MVC заботится о перенаправлении на основе конфигурации страницы входа в формы и после успешного входа/регистрации пользователь отправляется обратно на начальную запрашиваемую страницу
if (!User.Identity.IsAuthenticated)
{
//return new HttpUnauthorizedResult(); //This or the below statement should redirect the user to forms login page
return new HttpStatusCodeResult(System.Net.HttpStatusCode.Unauthorized);
}