【问题标题】:How to override default Identity AccessDenied route in ASP.NET CORE MVC如何在 ASP.NET CORE MVC 中覆盖默认的 Identity AccessDenied 路由
【发布时间】:2021-02-16 19:13:44
【问题描述】:

我想返回 403 状态代码或自定义 AccessDenied 视图(尚未决定)而不是 Identity/Account/AccessDenied?ReturnUrl=%2F 页面。但我只是不知道该怎么做,因为它是默认配置并且在后台工作。
我的应用程序的上下文:
我有 3 个角色:超级管理员、管理员和客户。因此,如果用户尝试访问未经授权的控制器/操作,那么我想抛出相应的 403 状态代码或客户访问被拒绝视图。
我是 Identity 的新手,所以我只知道如何自定义我的 IdentityUser 并使用 Login/SignUp/LogOut 以及用户角色的基础知识。所以请耐心等待我或尽量简单地解释这些概念,以便像我这样的猴子能够正确理解。
我将附上我的 Dependecy Injection 容器代码,以防有人需要。

public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllersWithViews();
            services.AddRazorPages()
                    .AddRazorRuntimeCompilation();

            services.AddDbContextPool<RealStateDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("Standard")));

            services.AddIdentity<AppUser, IdentityRole>()
                    .AddEntityFrameworkStores<RealStateDbContext>()
                    .AddDefaultUI()
                    .AddDefaultTokenProviders();

            services.Configure<IdentityOptions>(options =>
            {

                //add this option to identity configuration
                options.User.RequireUniqueEmail = true;
                options.Password.RequiredLength = 1;
                options.Password.RequireDigit = false;
                options.Password.RequiredUniqueChars = 0;
                options.Password.RequireLowercase = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase = false;
            });
}

我正在开发 asp.net core mvc 3.1,并且我正在尝试重构脚手架身份代码,因此它可以使用最少/不使用 razor pages 技术(尽可能使用 mvc)。

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    如果您想拥有一个自定义页面,您应该能够配置在用户尝试访问禁止路径时将其重定向到哪个 URL。使用默认身份配置,您可以通过application cookie settings 进行调整,如下所示:

    services.ConfigureApplicationCookie(options =>
    {
        options.AccessDeniedPath = "/MyHttpStatuses/AccessDenied";
    });
    

    然后你可以像往常一样创建你的 Razor 页面:

    // /Pages/MyHttpStatuses/AccessDenied.cshtml
    @page
    
    <h2>Access Denied!</h2>
    <p>Damn, looks like you're not important enough. Sorry.</p>
    

    现在,您应该被重定向到您的自定义 URL 并像处理普通页面一样处理该重定向。注意:如果您不想更改重定向 URL,则无需更改,但这只是一个示例。或者,您可以将其保留为默认值并在 /Pages/Identity/Account/AccessDenied.cshtml 下创建 Razor 页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2017-07-08
      • 1970-01-01
      • 2022-11-02
      • 2017-09-30
      • 2021-12-18
      • 2021-06-23
      • 2017-01-08
      相关资源
      最近更新 更多