Как перенаправить пользователя обратно туда, где он был после входа в asp.net mvc 3 - PullRequest
4 голосов
/ 16 марта 2011

Я изучаю ASP.NET MVC3 и сейчас изучаю обработку пользователей.Моей первой проблемой было бы (я знаю, что об этой теме много говорится в других темах, я просто не могу найти хорошую с MVC3), что я хочу, чтобы страница входа перенаправила меня туда, откуда я был, или откуда меня перенаправили,Возможно, в php я бы добавил этот URL в строку запроса.Но мне нужен способ сделать это как-то автоматически, и это настолько распространенный шаблон проектирования, что мне было интересно, есть ли «встроенный» способ сделать это.

Какой будет самый чистый или предпочтительный способсделать это?

Кроме того, когда я перенаправляю на страницу входа, которая будет лучшим способом проверки и сохранения URL-адреса, с которого я перенаправлен?Я бы проверил наличие реферера в объекте запроса и выложил его в URL как "? Redirect = protected.html", но я даже не уверен, как это правильно сделать.

Любые советы на эту темубыл бы признателен.

Ответы [ 3 ]

6 голосов
/ 16 марта 2011

MVC работает так же, как ASP.NET.

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

В вашей веб-конфигурации найдите строку с надписьюauthentication="Windows" и затем измените его на Forms

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

MVC 3 фактически даст вам маршрут Account / LogOn как часть проекта шаблона MVC 3 (проверьте ваши модели и посмотрите, есть ли у вас такойAccountModel).

Затем вы просто добавляете Authorization, чтобы запретить всем пользователям вашего сайта:

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

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

Таким образом, после того, как вы проверили правильность учетных данных входа в систему, вы устанавливаете AuthCookie так же, как ASP.NET:

FormsAuthentication.SetAuthCookie(userName, false);

Форма, которую вы можете перенаправить туда, гдехочу.

перенаправить обратно туда, откуда вы пришли:

FormsAuthentication.RedirectFromLoginPage(userName, false);

Не забывая другое полезное утверждение:

FormsAuthentication.SignOut();

Без аутентификации сайт не позволитвы входите куда угодно, пока не войдете в систему, поэтому CSSперестаньте работать.

Места, которые я добавил, чтобы убедиться, что этого не происходит, следующие:

<location path="Content">
 <system.web>
  <authorization>
    <allow users="?"/>
  </authorization>
 </system.web>
</location>
<location path="Scripts">
 <system.web>
  <authorization>
    <allow users="?"/>
  </authorization>
 </system.web>
</location>
3 голосов
/ 16 марта 2011

В asp.net это? ReturnUrl = ...

(1) Убедитесь, что у вас есть что-то вроде

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

в вашем корневом web.config.

(2) В вашем контроллере, который вы хотите защитить, добавьте атрибут [Authorize] над ним.

Создайте новый проект и выберите шаблон Интернет-приложение вместо Пустой , и вы получите образец простого процесса входа в систему и смены пароля.

Примечание: пожалуйста, прочтите это также: http://www.asp.net/mvc/tutorials/preventing-open-redirection-attacks

Пример показывает, что после входа в систему он проверяет, что returnUrl является локальным URL-адресом помощником Url.IsLocalUrl () для защиты от атаки открытого перенаправления.

Обновление: Лучший способ - реализовать собственный пользовательский процесс входа в систему . После того, как вы действительно знаете стандартный процесс, например, вместо использования URL-адреса для отслеживания, откуда пришел пользователь, вы можете установить новый файл cookie для хранения returnUrl с помощью httponly cookie и удалите его непосредственно перед перенаправлением на предыдущую страницу.

Другая распространенная практика - использовать роли . Вы можете указать каталог / контроллер для определенной группы пользователей с именем Role, добавив разрешенную роль, например, как атрибут над контроллером:

[Authorize(Roles = "Admin")]

См. это Visual Studio инструмент администрирования для создания примеров пользователей и ролей с помощью встроенного веб-интерфейса.

Возможно, вы также захотите использовать карту сайта , чтобы упорядочить ваши страницы и ссылки меню с помощью показать / скрыть меню в зависимости от текущей роли пользователя. Используйте эту mvcsitemap , чтобы добавить функции безопасности в карту сайта ASP.NET MVC.

0 голосов
/ 16 марта 2011

В некоторых случаях вместо стандартных форм используется обычная аутентификация (общий случай для приложений уровня предприятия).

В этом случае я бы рекомендовал вручную управлять параметром returnUrl в строке запроса. Страница входа читает этот URL и перенаправляет обратно после успешной аутентификации.

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