一、前言
不管是作为一个后台管理系统,还是客户端应用系统,登录都是一个必备的功能,基本上每个程序员都写过登录接口,基本就是用户输入账号密码然后去数据查比对是否一样,一样就返回登录成功,不一样就返回登录失败。当然这只是登录最简单的实现,其实登录是一个非常有技术含量的功能,本系统没有使用任何权限框架,而是基于JWT
+Redis
自己手撸实现的一套鉴权逻辑,采用了B、C端多账号体系认证,B端代表后台用户,C端代表前台用户,可以根据不同的端来处理登录逻辑,目前只实现了B端登录,如需C端请自行扩展。
二、登录设计
本系统中登录分为账号密码
登录、手机号
登录和第三方
登录,目前已经实现前面两种,第三种需要自己拓展实现。
2.1 账号密码登录
基本流程图:
进入登录页面之后会读取系统配置判断是否需要验证码
,如果需要验证码就会去请求验证码接口获取验证码并显示在页面上。
除了用户名密码,还需要将验证码和请求号传入登录接口供后端验证,不然这个验证码就形同虚设了。
后端接收到前端传过来的账号密码和验证码,判断验证码是否正确,解密之后的密码是否和数据库一致,如果吻合,则生成token返回给前端
在ExecLoginB方法中,主要会做三件事:
生成token
:前端拿到token去请求接口将token写入redis
:只有redis存在的token才有权限请求接口发布登录事件总线
:更新用户信息,登录Ip等信息。
2.2 手机号登录
基本流程图:
点击获取验证码
按钮获取短信验证码
接下的流程就和账号密码登录一样了,携带手机号和验证码取请求手机登录接口就行。
三、单用户登录
单用户登录是指在同一时间,同一客户端只允许一个人访问系统,当用户登录之后,其他已经登录的用户将被强制下线。本系统默认是多用户登录的,也就是一个账号可以在多个浏览器登录,想要开启单用户登录,只需要在系统设置里打开单用户登录开关就行。
原理也是很简单,我们登录之后的token都会存在redis
,当用户请求接口的时候会携带redis,如果redis有该token就允许请求,否则返回401,这里我们只要将其他token给去了,只留当前用户的token。
顺便通知其他用户下线。
其他用户会收到下线消息。