本文介绍了如何从ASP NET Core中的AuthorizationFilter重定向到登录页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我返回 ForbidResult()时,它会重定向到启动时指定的 AccessDenied 页面.我想对 UnauthorizedResult()做同样的事情,但是重定向到 Login 页面.

When I return ForbidResult() it redirects to AccessDenied page as specified in startup. I want to do same with UnauthorizedResult() but redirect to Login page.

PS .我没有在我有自己的控制器中使用标准的 Authorize 属性.

P.S. I'm not using standard Authorize attribute in controller I have my own.

授权过滤器:

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";
            });

推荐答案

要重定向到在 options.LoginPath ="/Accounts/Login"; 中配置的登录页面,您可以尝试以下代码:

For redirecting to login page which is configured in options.LoginPath = "/Accounts/Login";, you could try code below:

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);
        }
    }
}

这篇关于如何从ASP NET Core中的AuthorizationFilter重定向到登录页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 14:49