[英].NET Core AuthorizationHandler fails - how to route to a new page
您可以尝试使用 AuthorizationFilterContext 和 RedirectToActionResult 重定向到任何所需的控制器操作:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, HasPermissionRequirement requirement)
{
// Get the context
var redirectContext = context.Resource as AuthorizationFilterContext;
//check the condition
if (!result)
{
redirectContext.Result = new RedirectToActionResult("Login", "Account", null);
context.Succeed(requirement);
return Task.CompletedTask;
}
context.Succeed(requirement);
return Task.CompletedTask;
}
或者您可以尝试使用自定义中间件检查授权结果并重定向到登录页面,代码如下:
//SET REDIRECTION BASED ON AUTHORIZATION POLICY START
app.Use(async (ctx, next) =>
{
var ep = ctx.Features.Get<IEndpointFeature>()?.Endpoint;
var authAttr = ep?.Metadata?.GetMetadata<AuthorizeAttribute>();
if (authAttr != null && authAttr.Policy == "LoggedIn")
{
var authService = ctx.RequestServices.GetRequiredService<IAuthorizationService>();
var result = await authService.AuthorizeAsync(ctx.User, ctx.GetRouteData(), authAttr.Policy);
if (!result.Succeeded)
{
var path = $"/login";
ctx.Response.Redirect(path);
return;
}
}
await next();
});
//SET REDIRECTION BASED ON AUTHORIZATION POLICY END
更多详细信息,请参阅 使用 ASP.NET Core 基于策略的授权在未授权时重定向到登录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.