Авторизация в проекте MVC

У меня есть страница входа в проект MVC, и я создал конфигурацию авторизации это.

  <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880"  defaultUrl="~/Home/Index"/>
    </authentication>

  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

Как я могу получить доступ на странице регистрации?

2 ответа

Решение

В зависимости от того, какую версию MVC вы используете, я придерживаюсь общей практики, которую я вижу сейчас в MVC3/4, вместо того, чтобы ограничивать доступ к определенным действиям, ограничивать доступ ко всем действиям, добавляя Authorize() в качестве глобального фильтра, а затем предоставить доступ к нескольким избранным действиям, используя AllowAnonymous() атрибут действовать как белый список действий, которые не нужно защищать. (Например, Логин, Регистрация и т. Д.).

global.asax

protected void Application_Start()
{
    filters.Add(new AuthorizeAttribute());
}

AccountsController.cs

[AllowAnonymous]
public ActionResult Login()
{
    //Perform login...
}

Тогда вы web.config просто есть это

<authorization>
    <allow users="*" />
</authorization>

По умолчанию вы должны перейти к Register() метод действия Account контроллер

// GET: / Аккаунт / Регистрация

В соответствии с вашим web.config: попробуйте добавить это в web.config, прежде чем <system.web> тег.

 <location allowOverride="true" path="Account/Register">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

+1 Нику Альбрехту, но я обнаружил двусмысленность с "фильтрами", поэтому пришлось копать дальше.

На самом деле получается, что filters.Add(new AuthorizeAttribute());этот код принадлежит App_Start

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeTokens.AuthorizeWithMessage());
    }
}

а также FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters) вызывается в Application_Start.

Другие вопросы по тегам