MVC 3 - FormsAuthentication - не могу предоставить доступ к моему действию входа - PullRequest
3 голосов
/ 06 мая 2011

Я использую MVC 3 и FormsAuthentication:

<authentication mode="Forms">
  <forms loginUrl="~/Account/" timeout="2880" />      
</authentication>

Моя учетная запись / индексная страница отображает страницу входа в систему, а затем с помощью Jquery делает запись в учетную запись / вход в систему для аутентификации пользователя. Вот мое действие AccountController, которое его обрабатывает:

[HttpPost]
[Authorize(Users = "*")]
public ActionResult Login(string userName, string password) {
    ...
}

И Jquery, который отправляет на него:

$.post("/account/login", {
                "userName": $("#userName").val(),
                "password": $("#password").val()
            }, function (data) {
...});

Все вышеперечисленное работает, но теперь я хочу ограничить общий доступ к сайту, поэтому я добавил это в свой корневой web.config:

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

И в попытке разрешить доступ к контроллеру аккаунта я добавил это:

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

Вот моя проблема . Я могу просмотреть страницу входа (Учетная запись / Индекс), но не могу войти в Учетную запись / Вход. Когда я наблюдаю, что происходит через Fiddler, я получаю этот текст, возвращаемый с сервера при публикации на этой странице:

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

Кажется, что когда я добавляю "~ / Account" в полный список авторизованных пользователей, это на самом деле не работает, как это было бы в не-MVC проекте. Есть ли особый способ сделать это в MVC 3?

Ответы [ 2 ]

6 голосов
/ 06 мая 2011

Путь к контроллеру обычно не упоминается как относительный путь.Вы просто должны быть в состоянии сказать location = "Account", например,

<location path="Account">

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

2 голосов
/ 06 мая 2011

Не используйте AuthorizeAttribute для действия входа в систему.Нет смысла требовать авторизацию для самого процесса авторизации.

Чтобы требовать авторизацию для всех ваших контроллеров, вы можете создать

[Authorize]
public class AuthorizeController : Controller 
{
}

и расширить все ваши контроллеры с этого, кроме * 1007.*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...