2016-08-02 3 views
0

Когда вызывается мой AuthorizeAttribute, он отправляет страницу для входа в систему так, как должен. Но когда логин завершен, он выходит на главную/индекс. Это очень раздражает. Как я могу это избежать? Поскольку путь кода никогда не входит в мой контроллер, у меня нет никакого контроля над тем, что он делает.Как передать информацию в контекст фильтра AuthorizeAttribute - HandleUnauthorizedRequest

ответ

0

Использование проверки подлинности форм при доступе к странице, требующей аутентификации, 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"] }) 
+0

Проблема в том, что функция Login никогда не получает returnUrl, когда они перенаправляются, и я не могу понять, как убедиться, что она передана. –

+0

См. Мое последнее изменение – hernant