Когда вызывается мой AuthorizeAttribute
, он отправляет страницу для входа в систему так, как должен. Но когда логин завершен, он выходит на главную/индекс. Это очень раздражает. Как я могу это избежать? Поскольку путь кода никогда не входит в мой контроллер, у меня нет никакого контроля над тем, что он делает.Как передать информацию в контекст фильтра AuthorizeAttribute - HandleUnauthorizedRequest
ответ
Использование проверки подлинности форм при доступе к странице, требующей аутентификации, ASP.NET перенаправит вас на страницу входа, передав в ReturnUrl в качестве параметра.
Итак, все, что вам нужно сделать, это использовать этот параметр, чтобы вернуть пользователя в прежнее место.
public ActionResult Login(string username, string pass, string returnUrl)
{
// code to authenticate user here...
if (!string.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Index", "Home");
}
Вы могли бы также рассмотреть вопрос об использовании FormsAuthentication.RedirectFromLoginPage
Redirects an authenticated user back to the originally requested URL or the default URL.
https://msdn.microsoft.com/en-us/library/ka5ffkce(v=vs.110).aspx
Обратите внимание, что вызов этого метода также будет выдавать куки аутентификации, которые вы могли бы уже делать. Поэтому вы должны проверить, что вы не делаете этого дважды.
Edit: Смотрите https://stackoverflow.com/a/1206728/722778
Возможно, вы создаете свою форму, задающий контроллер действия (например, Html.BeginForm («входа», «Счет»)
В этом случае, попробуйте только это? на ваш взгляд:
Html.BeginForm()
Или передать параметр yourselve ReturnUrl:
Html.BeginForm("LogOn", "Account", new {ReturnUrl = Request.QueryString["ReturnUrl"] })
Проблема в том, что функция Login никогда не получает returnUrl, когда они перенаправляются, и я не могу понять, как убедиться, что она передана. –
См. Мое последнее изменение – hernant