Перенаправить на ту же страницу с флэш-сообщением в AuthorizeAttribute - PullRequest
0 голосов
/ 28 февраля 2019

Итак, у меня есть два пользовательских атрибута авторизации: 1) перенаправить пользователя на вход в систему, когда сеанс истек или не прошел аутентификацию;2) в данный момент выполняется.

Идея второго пользовательского атрибута авторизации состоит в том, чтобы перенаправить пользователя на ту же страницу, прежде чем он / она перейдет на следующую страницу, или предотвратить перенаправление на запрос следующей страницы.Допустим, код:

public class CustomAuth2Attribute : AuthorizeAttribute
{
    private const string _errorController = "Error";

    public override void OnAuthorization(AuthorizationContext filterContext)
    {                        
        var controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
        var action = filterContext.ActionDescriptor.ActionName;

        var area = "";
        if (filterContext.RouteData.DataTokens.ContainsKey("area"))
            area = filterContext.RouteData.DataTokens["area"].ToString();

        if (controller == _errorController)
        {
            return;
        }


        // checking the user identity whether the user is allowed to access this page
        // then redirect to the previous page before this request and add flash note: "not allowed to access the content"

    }     
}

Идея состоит в том, что если у пользователя нет доступа к определенной странице, я не отмечаю это как не авторизованный, вместо этого я должен вернуть его на страницу, которой он был ранее спримечание.

Также попробовал следующий код:

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
    controller,
    action,
    area
}));

Я получаю слишком много перенаправлений, потому что я ссылаюсь на текущий контроллер, действие и область вместо предыдущегоодин.Я также пытался получить значение UrlReferrer, но это всегда null.

Каким-либо образом я могу добиться этого?Любая помощь приветствуется.Заранее спасибо.

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете переопределить HandleUnauthorizedResult для этого:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    base.HandleUnauthorizedRequest(filterContext);

    filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.UrlReferrer.ToString());
}
...