代码之家  ›  专栏  ›  技术社区  ›  DomBurf

如何在ASP中的每个页面请求中将用户路由到登录页面。NET Core 2.0

  •  2
  • DomBurf  · 技术社区  · 6 年前

    我在google上做了很多工作,以找出在ASP中实现这一点的最佳方法。NET Core 2.0,但尚未得出任何明确结论。在ASP的早期版本中。NET/MVC我可以通过检查用户的会话是否经过身份验证,将用户路由到登录页面。

    我正在ASP中寻找类似的东西。NET Core 2.0。我想检查每个页面请求上的用户是否经过身份验证,如果没有,则将其路由到登录页面。

    如何在ASP中实现这一点。净核心2?

    2 回复  |  直到 6 年前
        1
  •  4
  •   pitaridis    6 年前

    ASP。NET Identity将为您完成这项工作。您只需定义哪些文件/文件夹受保护,哪些是公共的。您可以在启动的ConfigureServices方法中定义它。cs文件。

    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizeFolder("/AuthorizedFolder");
            options.Conventions.AuthorizePage("/AuthorizedPage");
            options.Conventions.AllowAnonymousToFolder("/AuthorizedFolder/AllowFolder");
            options.Conventions.AllowAnonymousToPage("/AuthorizedFolder/AllowPage");
        });
    

    我添加了4个约定,以便于您理解其工作原理。第一个约定是,AuthorizedFolder文件夹中的所有页面都将受到保护,您必须登录才能查看其内容,否则您将被重定向到登录页面。

    第二个约定是AuthorizedPage页面受到保护,这意味着只有登录的用户才能查看此页面的内容。

    第三种约定是在受保护的文件夹中定义一个公用文件夹。

    第四个约定在受保护的文件夹中定义了一个公共razor页面。

    控制器

    对于控制器,可以使用Authorize和AllowAnonymous属性。以下示例演示如何保护控制器的所有操作:

    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    
    namespace WebApplication3.Controllers
    {
        [Authorize]
        public class TestController : Controller
        {
            public IActionResult Index()
            {
                return View();
            }
        }
    }
    

    以下示例演示如何保护一个操作:

    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    
    namespace WebApplication3.Controllers
    {
        public class TestController : Controller
        {
            [Authorize]
            public IActionResult Index()
            {
                return View();
            }
        }
    }
    

    最后,您可以看到如何保护控制器,但公开受保护控制器的一个操作:

    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    
    namespace WebApplication3.Controllers
    {
        [Authorize]
        public class TestController : Controller
        {
            [AllowAnonymous]
            public IActionResult Index()
            {
                return View();
            }
        }
    }
    

    我希望这有帮助。

        2
  •  0
  •   Some guy    3 年前

    对于任何正在寻找授权所有页面的简单方法的人,您都可以这样做。

    services.AddRazorPages(options =>
    {
        options.Conventions.AuthorizeFolder("/");
    });