Авторизация в проекте 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.