回想一下我们之前的登录实现过程,登陆成功后再把登录信息保存到Cookies或者Session里面,而在ASP.NET Core中我们知道,借助ASP.NET Core Identity 我们可以实现一个用于创建和维护用户登录的完整的,功能齐全的身份验证提供程序。当然,这里为了实现我们自己的登录逻辑,所以我们只使用基于基于cookie的身份验证,即将基于cookie的身份验证用作没有ASP.NET Core Identity的独立身份验证提供程序。
登录流程登录流程如下图所示:
这里的流程很简单,相信大伙扫一眼应该就能明白.
功能实现这一小节我们就来一步一步的实现我们的登录功能吧,在开始之前呢,先看下我们的登录界面,如下图所示:
由于我们这里用到了基于cookie的身份认证,所以如果应用程序没有使用Microsoft.AspNetCore.App元数据包,那么你需要再你的项目文件中添加Microsoft.AspNetCore.Authentication.Cookies Nuget包(版本2.1.0或更高版本
在ConfigureServices 方法中,通过添加AddAuthentication以及AddCookie方法来注入身份认证服务,代码如下:
当然你还得在Configure 中启用认证服务
接下来就是登录页面的加载代码如下:
这里有一个returnUrl 用来返回退出前的页面,默认返回首页
这里页面js的判断流程的js代码我就不贴出来了,如果有兴趣你可以访问文章底部的Github上的源码进行查看
代码提交后我们要首先验证验证码是否有效,然后判断错误次数是否超了,然后再次对实体进行规则性验证,最后才进行登录的操作,具体的代码有点长,下面只贴出部分重要的代码
判断验证码是否有效:
判断错误次数是否超过规定的最大允许错误数:
服务端对实体代码规则判断:
登陆的具体代码:
这里登录成功就进行登录次数,最后登录时间以及IP的记录,然后写入管理员操作日志中.
最后所有验证通过后,直接调用HttpContext.SignInAsync 方法即可登录成功.这里我们在Claim中存放了很多我们后面需要用到的信息.
页面中处理返回结果,成功则调整到'ReturnUrl' 不成功则停留在登录页面.
好了,登录功能到现在就演示完成了,我们登录测试下,然后看一下吧!
当没有输入验证码时: