簡體   English   中英

如何從ASP NET Core中的AuthorizationFilter重定向到登錄頁面?

[英]How to redirect to login page from AuthorizationFilter in asp net core?

當我返回ForbidResult()它會重定向到啟動時指定的AccessDenied頁面。 我想對UnauthorizedResult()做同樣的事情,但重定向到“ Login頁面。

PS我在控制器中沒有使用標准的Authorize屬性,但我有自己的屬性。

授權過濾器

public class MyFilter : IAuthorizationFilter
{
    //

    public MyFilter()
    {
        //
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (context.HttpContext.User.Identity.IsAuthenticated)
        {
            var hasPermission= ... ;
            if (!hasPermission)
            {
                context.Result = new ForbidResult();
            }
        }
        else
        {
            context.Result = new UnauthorizedResult();
        }
    }
}

啟動

services.AddAuthentication.AddCookie(options =>
            {
               options.LoginPath = "/Accounts/Login";
                options.LogoutPath = "/Accounts/Logout";
                options.AccessDeniedPath = "/Accounts/AccessDenied";
            });

您可以使用RedirectResult或context.Response.Redirect(“ / Accounts / Login”);進行測試。

public class MyFilter : IAuthorizationFilter
{
    //

    public MyFilter()
    {
        //
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (context.HttpContext.User.Identity.IsAuthenticated)
        {
            var hasPermission= ... ;
            if (!hasPermission)
            {
                context.Result = new ForbidResult();
            }
        }
        else
        {
            context.Result = new RedirectResult("/Accounts/Login");
        }
    }
}

用於重定向到options.LoginPath = "/Accounts/Login";配置的登錄頁面options.LoginPath = "/Accounts/Login"; ,您可以嘗試以下代碼:

public class MyFilter : IAuthorizationFilter
{
    //

    public MyFilter()
    {
        //
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (context.HttpContext.User.Identity.IsAuthenticated)
        {
            var hasPermission= ... ;
            if (!hasPermission)
            {
                context.Result = new ForbidResult();
            }
        }
        else
        {
            context.Result = new ChallengeResult(CookieAuthenticationDefaults.AuthenticationScheme);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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