使用授权过滤器时页面未重定向到登录页面
Page is not redirecting to the login page while using Authorization Filter
我创建了一个 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();
}
现在的问题是取消授权时,系统没有重定向到登录页面。尽管我在启动 class.
的 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");
});
任何人都可以帮助我在页面未授权时重定向到登录页面。
在 OnAuthorization 检查授权后,我们可以使用以下代码重定向到 account/login 页面。
context.Result = new RedirectResult("~/account/login");
或
context.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
{
controller = "account",
action = "login"
}));
我创建了一个 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();
}
现在的问题是取消授权时,系统没有重定向到登录页面。尽管我在启动 class.
的 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");
});
任何人都可以帮助我在页面未授权时重定向到登录页面。
在 OnAuthorization 检查授权后,我们可以使用以下代码重定向到 account/login 页面。
context.Result = new RedirectResult("~/account/login");
或
context.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
{
controller = "account",
action = "login"
}));