Подтвердить что ты не робот

ASP.NET MVC4 Перенаправление на страницу входа в систему

Я создаю веб-приложение с использованием ASP.NET MVC 4 и С#.

Я хочу, чтобы все пользователи вошли в систему перед использованием приложения.

Я использую членство ASP.NET с пользовательской базой данных.

Один метод - проверить, является ли Membership.GetUser() нулевым или нет в каждой функции.

Но нет ли более простого способа, чем проверка состояния входа пользователя в каждую функцию? (возможно, проверка в web.config, global.asax и т.д.)??)

4b9b3361

Ответ 1

Конечно, украсьте свои действия или весь класс [Authorize], и для этого потребуется, чтобы пользователь вошел в систему первым.

Ответ 2

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

Вот что выглядит классный:

[Authorize]
public class SomethingController
{
    //...
}

и здесь один уровень действия:

public class SomethingController
{
    [Authorize]
    public ActionResult SomeAction(Parameter someParameter)
    {
        //...   
    }
}

Другой способ сделать это, если все или большинство ваших страниц используют одну и ту же главную страницу, заключается в том, чтобы поставить:

<script type="text/javascript>
    @if(!Request.IsAuthenticated) {
        window.location.href = redirectURL;
    }
</script>

или если вы используете синтаксис бритвы,

<script type="text/javascript>  
    <% if(!Request.IsAuthenticated) { %>
        window.location.href = redirectURL;
    <% } %>
</script>

на главной странице. Таким образом, все страницы, которые используют эту главную страницу, будут перенаправлены в другом месте, если пользователь не войдет в систему. Это применимо только в том случае, если вы используете встроенную аутентификацию. ПРИМЕЧАНИЕ. Этот параметр гораздо менее безопасен, чем первый вариант. Используйте это только в том случае, если безопасность сайта не является большой проблемой.

Ответ 3

Вы можете написать собственный атрибут [Authorize]. Затем просто украсьте контроллеры/действия с ним или если все действия требуют авторизации, вы можете зарегистрировать его как глобальный фильтр действий.

Ответ 4

Вы можете поместить атрибут [Authorize] на свой контроллер или на отдельные методы в контроллере, чтобы выбрать, кто может открыть действия и с помощью каких разрешений. Вы также можете разрешить такие роли, как: [Authorize(Roles="Admin")], где вы разрешаете только пользователям в роли администратора получать доступ к вашему действию/контроллеру. Например:

[Authorize(Roles="SimpleUser")] or with no roles [Authorize]
public ActionResult Index()
{
    return View();
}

[Authorize]
[HttpPost]
public ActionResult Index(FormCollection form)
{
    ... whatever logic
    return View();
}

Надеюсь, что это поможет;]

Ответ 5

Используйте [Авторизовать] на уровне класса

если вы хотите разрешить анонимный доступ к некоторым действиям, используйте [AllowAnonymous]

Ответ 6

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

В startup/init для вашего приложения добавьте...

httpConfig.filters.Add(new AuthorizeAttribute());

... затем на действия, которые вы DONT хотите защитить...

[AllowAnonymous]
public ActionResult Hello() { return View(); }