.net core使用razor pages指定目录登录后才能访问

.net core使用razor pages指定目录登录后才能访问该如何做以及最佳实践是怎样的,江湖人士专门编写一个示例程序供参考学习。

新项目使用.net core来开发,项目建为 web 应用程序类型,使用这个类型是基于其跟老的asp.net 使用webform开发方式类似,一个页面一个后置类(PageModel),如下图所示:

.net core使用razor pages

使用web应用程序项目类型开发速度和asp.net 使用aspx可视化界面有的一比,适用于短平快的项目,当然项目规划得好,我相信,大型项目一样没有问题照样撸下来;还有一个好处是直接在当前页面处理ajax请求也是非常方便的,不需要单独建立什么控制器再写一个方法(action)来处理事件,您可以在后置代码里面直接可以撸ajax处理事件,.net core出来这么久,已经更新到 2.2了,眼看3.0也会很快发布了,它的好处,只有亲身项目经历过才会深刻理解。

.net core使用razor pages没有登录,不能访问后台界面

今天我们的主旨是要实现在项目里面,有两个目录,需要登录后才能访问;如果访问者没有登录,直接在浏览器输入后台应用地址,则自动重定向到登录界面,如下图跳转链接所示,因此我建立了一个测试项目,并基于此实现了一个简单的使用cookie认证的demo项目,并且通过代码配置指定文件夹的方式来阻止非法访问请求。

.net core使用razor pages指定目录登录后才能访问 1

follow me,还原需求

操作如下,打开VS2017,新建asp.net core web应用程序,选择Web 应用程序,使用asp.net core2.2,开发时去掉https配置,如下图所示:

.net core使用razor pages指定目录登录后才能访问 2

新建好项目后,初始目录如下图所示:

.net core使用razor pages指定目录登录后才能访问 3

项目创建成功后,按我下图所示添加两个目录,分别表示公司用户和个人用户的后台,这两个目录里面的页面,是必须登录后才能访问的;创建好后的目录结构如下图所示:

.net core使用razor pages指定目录登录后才能访问 4

以上目录创建好了后,编译后运行,我们直接输入公司或者个人后台地址,效果如下图:

.net core使用razor pages指定目录登录后才能访问 5
.net core使用razor pages指定目录登录后才能访问 6

出现上面这种情况是肯定是不对的。

解决这个问题(Cookie身份认证)

真实项目中,出现直接输入地址可以访问后台的情况,那就很危险了,轻则脱库,重则破产,总之危险可大可小了。

使用.net core开发网站应用,因为是网站,我们直接使用基于cookie的身份认证方式吧,.net core为我们提供了优雅的方式来解决这个问题。要解决这个问题,需要做如下操作:

第一:配置指定目录须经认证才可访问,直接在启动类(Startup.cs)里面写如下代码即可。

services.AddMvc().AddRazorPagesOptions(options =>
               {
                   options.Conventions.AuthorizeFolder("/company");
                   options.Conventions.AuthorizeFolder("/personal");
               });

以上代码是按文件夹来控制的,重要的一句是:options.Conventions.AuthorizeFolder(“/company”),它就是控制company目录按文件夹授权的,熟悉webform开发方式的朋友,可以跟form认证比较一下,在此就不详述。

第二:编写cookie配置身份认证代码即可,如下所示:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
            {
                options.Cookie.HttpOnly = true;
                options.LoginPath = new PathString("/login");
            });

上面的代码,主要目的就是设置身份认证方式为cookie,并且设置经过认证后发送到客户端的cookie为只读,即只允许js脚本只读,同时还设置了没有登录直接输入后台地址时,自动跳转到登录(loging)界面。

第三:在Configure方法加上app.UseAuthentication();

这句代码不加是不起作用的。必须加。

如何登录和注销

在登录前面界面没有什么特别之处,主要是后台对事件的处理代码如下所示:

        public async Task<IActionResult> OnPostLoginAsync()
        {
            //实际业务中,model需要验证,需要连接数据库根据登录方式从数据库查询用户
            //通过注入方式,将服务层注入到此,调用登录方法,
            //通过构造函数注入。
            var claims = new List<Claim> { new Claim(ClaimTypes.Name, "https://jhrs.com") };

            var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity));
            //登录成功,跳转后台首页
            return LocalRedirect("/company");
        }

核心就是调用HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,newClaimsPrincipal(claimsIdentity))这句代码完成cookie认证。

注销代码如下:

HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

完整的demo代码可以从这儿下载, .net core基于Cookie身份认证示例代码 (下载1771 )

加入电报群

【江湖人士】(jhrs.com)原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2019/27113.html

扫码加入电报群,让你获得国外网赚一手信息。

文章标题:.net core使用razor pages指定目录登录后才能访问

(1)
江小编的头像江小编
上一篇 2019-03-20 13:31
下一篇 2019-03-21 13:11

热门推荐

Leave a Reply

Sending

国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM698
$5.98/年
直达官网