Я работаю над приложением mvc.net, и я использую проверку подлинности на основе форм. Я хочу перенаправить пользователя на запрашиваемую им страницу после того, как он получит аутентификацию. Любая помощь будет оценена.
Перенаправление на запрашиваемую страницу после аутентификации
Ответ 1
Если вы создаете проект интернет-приложения ASP.NET MVC 3 или 4, он будет иметь полный пример использования возвращаемого URL-адреса при аутентификации.
Когда вы добавляете AuthorizeAttribute к контроллеру для принудительной аутентификации, он перенаправляет пользователя на ваш метод входа и автоматически добавляет параметр returnUrl. Оттуда вы должны отслеживать его, показывая свою регистрационную форму:
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
а затем добавьте его в свою коллекцию маршрутов в форме входа:
@*//ReSharper disable RedundantAnonymousTypePropertyName*@
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@*//ReSharper restore RedundantAnonymousTypePropertyName*@
}
После того, как пользователь отправит логин, предположив, что он аутентифицирован правильно, вы просто перенаправляете на returnUrl:
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
return RedirectToLocal(returnUrl);
}
Самая сложная часть - отслеживание ReturnUrl через последовательность GET/POST.
Если вы хотите увидеть, как работает AuthorizeAttribute, fooobar.com/info/460228/... показывает настройку returnUrl с исходным запросом.
Вам также необходимо убедиться, что вы вернули returnUrl на самом деле, это локальный URL-адрес, или вы уязвимы для открытых атак перенаправления. RedirectToLocal() - это вспомогательный метод из шаблона интернет-приложения MVC 4, который выполняет эту проверку:
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}