Аутентификация ASP.NET MVC3 Forms не разрешает публикацию действий при входе в систему - PullRequest
0 голосов
/ 09 марта 2012

Аналогично этому сообщению: MVC 3 - FormsAuthentication - Не могу предоставить доступ к моему действию входа в систему

Я не могу получить свою форму для ввода имени пользователя / пароля впост-обработчик действия Logon.Тем не менее, мой AccountController наследуется от контроллера по умолчанию, то есть нет атрибута [Authorize].Мой контроллер аккаунта выглядит так:

 [HttpGet]
 public ActionResult LogOn()
 {
     return View();
 }

 [HttpPost]
 public ActionResult LogOn(LogOnModel model, string returnUrl = null)
 {
     ...
 }

И мой web.config содержит, среди прочего:

    <location path="Account">
            <system.web>
                    <authorization>
                            <allow users="?"/>
                    </authorization>
            </system.web>
    </location>

    <authorization>
        <deny users="?" />
    </authorization>

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

После отправки формы входа в систему он сразу перенаправляет меня на [HttpGet] версия LogOn-акции.Я никогда не обращаюсь к POST-версии.Я получаю такой же ответ, как упомянуто в посте выше:

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=%2f">here</a>.</h2>
</body></html>

Если я закомментирую <authorization>, все работает нормально.Однако в этом случае, когда я ввожу глубокую ссылку на страницу, требующую авторизации, я не перенаправляюсь на страницу входа.

Я также попытался добавить местоположение «Аккаунт» и разрешить всепользователи, но это, кажется, не имеет никакого эффекта.

Кто-нибудь может указать, что я делаю неправильно?

РЕДАКТИРОВАТЬ

В FiddlerЯ всегда вижу этот шаблон:

#   Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
1   302 HTTP    localhost:36372 /   145 private     text/html; charset=utf-8    iexplore:6400           
2   200 HTTP    localhost:36372 /Account/LogOn?ReturnUrl=%2f    4,752   private     text/html; charset=utf-8    iexplore:6400           

Почему первый URL всегда /?

EDIT2

Мне пришло в голову проверитьсгенерированный HTML, и, к моему удивлению, это выглядит так:

<form action="/" id="LogOnForm" method="post">

Очевидно, это не правильное действие.Код ASP выглядит следующим образом:

@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { id = "LogOnForm" }))

А мои маршруты выглядят так:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults
);

Ответы [ 2 ]

1 голос
/ 19 августа 2012

Вы можете установить авторизацию с помощью простого атрибута авторизации в MVC

    [Authorize]
    public ViewResult SubmitPost()
    {
        return View();
    }    

И вам нужно установить куки для авторизации, которая по умолчанию будет создавать зашифрованные куки и истечет только после закрытия браузера

   FormsAuthentication.SetAuthCookie("Name", false);
0 голосов
/ 09 марта 2012

Вам необходимо добавить тег местоположения для / account / logon и разрешить анонимный доступ к нему.

...