簡體   English   中英

.NET Core AuthorizationHandler 失敗 - 如何路由到新頁面

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM