Страница не перенаправляет на страницу входа при использовании фильтра авторизации - PullRequest
0 голосов
/ 21 марта 2020

Я создал AuthorizationFilter для проверки авторизации при доступе к методам действия. Код ниже:

public class MyAuthorizeActionFilter : IAuthorizationFilter
{
    private readonly int _userAge;

    public MyAuthorizeActionFilter(int userAge)
    {
        _userAge = userAge;
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        bool isAuthorized = CheckUserPermission(context.HttpContext.User, _userAge);

        if (!isAuthorized)
        {
            context.Result = new UnauthorizedResult();
        }
    }

    private bool CheckUserPermission(ClaimsPrincipal user, int age)
    {
        if (user.Claims == null || !user.Claims.Any()) 
            return false;

        var dob = Convert.ToDateTime(user.FindFirst(ClaimTypes.DateOfBirth).Value);

        var years = DateTime.Today.Year - dob.Year;

        return years >= age;

    }
}

Затем я создал атрибут авторизации, который находится ниже:

public class MyAuthorizeAttribute : TypeFilterAttribute
{
    public MyAuthorizeAttribute(int age) : base(typeof(MyAuthorizeActionFilter))
    {
        Arguments = new object[] { age };
    }
}

Я использовал вышеуказанный атрибут авторизации в моем методе действия контроллера.

[MyAuthorize(21)]
    public IActionResult Index()
    {
        return View();
    }

Теперь проблема в том, что при несанкционированном доступе система не перенаправляет на страницу входа. Хотя я поместил приведенный ниже код в метод ConfigureService в классе запуска.

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.Cookie.Name = "_auth";
                options.LoginPath = new PathString("/account/login");
                options.LogoutPath = new PathString("/account/logout");
                options.AccessDeniedPath = new PathString("/account/login");
            });

Может ли любое тело помочь мне перенаправить на страницу входа, когда страница не авторизована.

1 Ответ

0 голосов
/ 26 марта 2020

В OnAuthorization после проверки авторизации мы можем перенаправить на страницу аккаунта / логина с указанным ниже кодом.

context.Result = new RedirectResult("~/account/login");

ИЛИ

context.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new
                    {
                        controller = "account",
                        action = "login"
                    }));
...