为了实现用户登录前无法直接通过地址栏进入主页面,实现登录验证功能

Startup.cs 配置服务和中间件:

public void ConfigureServices(IServiceCollection services){//添加授权支持,并添加使用Cookie的方式,配置登录页面和没有权限时的跳转页面services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o =>{o.LoginPath = new PathString("/Home/Login");            //登录路径:这是当用户试图访问资源但未经过身份验证时,程序将会将请求重定向到这个相对路径。o.AccessDeniedPath = new PathString("/Home/Error");     //禁止访问路径:当用户试图访问资源时,但未通过该资源的任何授权策略,请求将被重定向到这个相对路径。o.SlidingExpiration = true; //Cookie可以分为永久性的和临时性的。 临时性的是指只在当前浏览器进程里有效,浏览器一旦关闭就失效(被浏览器删除)。 永久性的是指Cookie指定了一个过期时间,在这个时间到达之前,此cookie一直有效(浏览器一直记录着此cookie的存在)。 slidingExpriation的作用是,指示浏览器把cookie作为永久性cookie存储,但是会自动更改过期时间,以使用户不会在登录后并一直活动,但是一段时间后却自动注销。也就是说,你10点登录了,服务器端设置的TimeOut为30分钟,如果slidingExpriation为false,那么10: 30以后,你就必须重新登录。如果为true的话,你10: 16分时打开了一个新页面,服务器就会通知浏览器,把过期时间修改为10: 46。});}
public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseAuthentication(); //身份验证中间件}

后台Login方法:

public async Task<JsonResult> Login(string uName,string password){try{if (string.IsNullOrEmpty(uName) || string.IsNullOrEmpty(password)){return Json(new { result = false, msg = "请完善信息后登录" });}string strSql = "select * from t_user where userName=@userName and password =@password";DataTable dt = DBHelper.GetDataTable(strSql, new MySqlParameter("@userName", uName), new MySqlParameter("@password", password));if (dt !=null){#region 登录认证,存入Cookie//登录认证,存入Cookievar claims = new List<Claim>(){new Claim(ClaimTypes.Name,uName),new Claim("password",password),new Claim("roleID",dt.Rows[0]["roleID"].ToString())};//init the identity instances var userPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, "Customer"));//signin await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, new AuthenticationProperties{ExpiresUtc = DateTime.UtcNow.AddMinutes(20),IsPersistent = false,AllowRefresh = false});#endregionreturn Json(new { result = true, userName=dt.Rows[0]["userName"], password = dt.Rows[0]["password"], roleID = dt.Rows[0]["roleID"] });}else{return Json(new { result = false,msg= "用户名或密码输入错误,请重新输入" });}}catch (Exception ex){return Json(new { result = false, msg = "登录失败" + ex.Message });}}

注:Login方法红框的配置必须与Startup.cs配置一样

Login

startup.cs

然后在控制器页面方法上加上特性过滤

[Authorize] :进行登陆验证,验证通过后才能进入页面,否则跳转到设置好的页面地址

[AllowAnonymous]:跳过验证,加上该标签就可以在登陆验证时跳过该方法,一般加在登陆页上

最后实现登出功能:

public async Task<JsonResult> Logout(){await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);return Json(new { msg = "退出成功" });}

一句话就ok,依然要注意 这里用的是.SignOutAsync,而不是.SignInAsync,CookieAuthenticationDefaults.AuthenticationScheme ,也必须和配置的一样。

以上就是一个简单的.NET Core 登陆验证。

.Net Core 登陆验证相关推荐

  1. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片...

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  2. Spring Security简单的登陆验证授权

    Spring Security的介绍就省略了,直接记录一下登陆验证授权的过程. Spring Security的几个重要词 1.SecurityContextHolder:是安全上下文容器,可以在此得 ...

  3. ssm过滤器可以只过滤html吗,SSM登陆验证之过滤器实现

    开发中登陆验证是必不可少的,这里介绍过滤器实现的登陆验证. 第一步:创建一个过滤器 package com.test.filter; import java.io.IOException; impor ...

  4. struts2中用户登陆验证的常用方法

    一般我们在登陆验证窗口输入用户名或密码后,会将这些信息与数据库中的相关信息进行匹配,如何正确,就会返回到相应的页面,如果不正确,在登陆窗口会显示用户名或密码不正确的警告. struts2中的做法: 在 ...

  5. JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证

    在学习JavaEE的过程中慢慢了解到Java中编程思想的优秀设计,以下将是一个多态-向下转型的示例,该实例是在Servlet-过滤器中的登陆验证的示例,代码中运用向下转型解决问题 import jav ...

  6. Java的登陆验证问题

    java中的登陆验证问题可以有多种方式进行验证,通过拦截器功能完成,可以通过过滤器功能完成,也可以简单的代码在JSP页面中单独完成,其中都 涉及到一个关键的验证步骤,这个验证原理ASP,PHP,JAV ...

  7. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  8. python编写一个登陆验证程序_python项目实战:实现验证码登录网址实例

    前言 相信大家都明白,大多数的网站为了不被恶意访问,往往需要设置验证码登录,避免机器人访问,而造成我服务器瘫痪,崩溃,这里用到Python3,主要用到的包是re urllib.request http ...

  9. yii 前后台分离及登陆验证

    2019独角兽企业重金招聘Python工程师标准>>> 比较合理的做法其实是分成两个框架来布署:然而这样说法也太绝对. 事实上是针对不同系统,应采用不同的方法.如为CMS系统,则不需 ...

最新文章

  1. 一文详解鱼眼相机的车位线感知
  2. 你知道什么是Jest吗?
  3. easyui validatebox验证
  4. 新手小白零基础搭建个人博客(一)服务器篇
  5. java中input表单中的type=date返回类型【切记】
  6. 前后端分离的项目部署到tomcat_前后端分离后,tomcat服务器部署和发布
  7. Jenkins 入门系列--jenkins 介绍
  8. mysql的表导出er关系图_使用Navicat生成ER关系图并导出的方法
  9. 5G +边缘计算,优酷如何做云渲染?
  10. 售价3998元!iQOO 3拉力橙明日全款预售:3月29日首销
  11. MyEclipse控制台报错:java.lang.OutOfMemoryError: PermGen space
  12. 推荐好用的Linux远程连接工具
  13. PyMuPDF 拼版(二)
  14. 干货丨自学成才秘籍!机器学习深度学习经典资料汇总(一)
  15. 手机将PDF转换成Word的超简单方法
  16. VBA和Excel学习记录
  17. 系统架构师(1)计算机组成与结构
  18. 识别不同域名访问不同主页
  19. 删除Windows启动管理器下的加载项
  20. SQL:SEARCH DEPTH FIRST和 SEARCH BREADTH FIRST

热门文章

  1. OMAP开发板的启动过程
  2. 刑侦 技侦 警种
  3. 从瑞银集团看客户导向型财富管理机构如何从资产配置服务中获利
  4. java项目pm_项目中PO、PM的职责区分
  5. leaving:false netPeers:2 entries:83 Queue qLen:0 netMsg/s:0
  6. 三种求平方根的算法——C/C++
  7. 【Python自动化任务】让运维更简单的7种定时任务实现方式,总有一种适合你的场景
  8. 【线段树】【P5522】[yLOI2019] 棠梨煎雪
  9. 显著性检验 p-value
  10. python实现3d人物建模_一张图实现3D人脸建模!这是中科院博士生入选ECCV的新研究 | 开源...