00:00
接下来这个过程呢,实际上就和前面注册的过程很像了,那么注册的过程呢,我们是封装了一个关于注册表单的一个VI对象,那么登录的过程呢,我们也封装一个关于登录表单的VIVO对象,这表单里面呢,一共有三个字段,一个是用户类型,一个是手机号,一个是密码,所以呢,我们就针对这三个字段呢,封装一个叫做login VO的这样的一个对象,那接下来呢,我们就找到我们的call。号啊,然后呢,在这个号里面呢,我们啊找到VO包,在VO包里面呢,咱们新建一个login VO哈,然后在老VO里面呢,咱们去。Data啊,我就把笔记当中的这个定义就直接复制过来吧。好,这里面呢有三个字段,一个呢是user type,一个是mobile,一个呢是password啊好,然后接下来呢,我们来看一下啊,在这面呢,我们如果把VI对象定义出来之后呢,还要定一个对象,还要定一个什么对象呢?就是如果用户点击立即登录,登录成功之后,我们需要在这个上面呢,去显示当前用户的个人信息,所以呢,我们再定一个用户信息对象。
01:25
这个用户信息对象呢,我们啊写一个就user啊,Info,然后这里面包含什么呢?包含用户姓名啊,昵称啊,头像啊,手机号啊,还有这个啊,用户的类型啊,啊另外还有一个非常重要的就是JWT的访问令牌啊,我们把未来有可能需要用到的这些信息呢,先全都封装起来啊,以便于后期后面的一个使用,所以呢,我们再封装一个。好,同样这里面的内容呢,我就不一一的去写了,我们直接把它复制过来。
02:05
好,这里面包含一个比较特殊的属性,叫做JWT访问令牌啊,我们从前端啊这个获取从后端这个啊,从这个后端向前端发送这个JWP令牌呢,我们就使用这种方式啊,把这个令牌呢传到前端,那么啊一会儿我们再看一看具体怎么样啊,通过这个user对象把这个令牌从前端获取到,并且把它存储起来。好,那这块呢,是我们的一个两个VO对象的一个封装的过程,那这两个用VO对象封装完了之后呢,我们就可以写ctrler了,以呢,我们打开C了,然后在这个cler里面呢,咱们去。啊,打开API,然后打开我们刚才的这个user in for control来,在这里面呢,我们写一个方法public r啊,就是我们的log方法,然后呢,我们是接收request body形式的log in VO,好,然后后面这块呢,我们先啊。
03:09
把前面的这个注解呢,给他完善一下,要post map,那这块呢,我们写杠要in啊,前面这块呢,我们写API operation这块呢是会员登录,嗯,后面这块呢,我们像之前一样哈,就是把这个in。Log in。VO里面的mobile给它获取出来,然后接下来呢,把EVO里面的password给它获取出来啊,同样对这个mobile和password呢,进行一个非空判断。好,这样的话呢,前面的一个校验的工作我们就做完了,接下来呢,我们就把这个用户的IP获取出来,为什么要获取用户的IP呢?因为我们登录的时候大家看啊。
04:06
我们这边有一个user log in record叫做用户登录日志,用户每一次登录的时候,我们都要记录一下这个用户登录日志,用户的ID是什么,用户的登录的客户端的IP是什么,用户的啊,这个登录时间是什么,对吧?啊,所以呢,这个是用户登录日志的一个创建,那么既然这个地方呢,要获取用户的IP,所以这个位置呢,我们就去传一个HTTP啊,Http request request,然后呢,可以从这个。Request当中拿到拿到我们的remote a DR这个呢,实际上就能够拿到这个远程主机啊,就是相对于服务器来说啊的远程主机,那不就是客户端嘛啊这个远程主机的这样的一个地址,那这个就是客户端地址,然后接下来呢,我们就把这个啊IP呢就要传进去啊,比如说这个地方就叫IP。
05:08
好,然后接下来呢,我们就,嗯。User in for。Service吧,我们一会写一个啊log in方法,Login方法的话呢,我们把这个log in VO以及我们刚刚拿到的这个IP呢,对的传进去,传进去之后呢,最终我们希望得到一个什么呢。啊,我们希望得到一个,刚才我们不是封装了两个view对象嘛,我们希望得到一个login啊,这个user in for view对象,然后呢,把整个的这个UC for VO对象呢,就发送给前端,然后前端需要什么,它就展示什么就可以了,所以呢,这面呢,我们希望我们这边呢是拿到一个UC。In for VO的啊,然后所以user for VO等于。啊,这个然后最后呢,我们就return就行了,Return r.ok.data塔,然后这块呢是info好,然后呢,我们把这个user in for AO呢啊以这种形式呢,返回给前端就可以了,所以这块呢是我们controller层的编写好controller层呢没有什么问题哈,没有什么难度啊,然后我们开始看定层create啊,就是看这个service层的这个老定方法。
06:29
啊,接下来呢,在这个冷静方法里面呢,我们首先要做的一件事情呢,就是嗯,登录嘛,啊首先你要判断一下用户存不存在对吧,基于用户名判断用户是否存在,然后呢,密码是否正确。嗯,然后呢,用户是否被禁用。
07:01
好,然后呢,记录登录日志,好,前面这个都走通了之后,用户存在密码正确,用户没有被禁用,那么再登录,登录的时候呢,我们记录登录日志啊,记录完登录日志之后呢,生成ton。生成偷看,然后呢,组装就色围。啊,然后返回就可以了,所以在这个地方呢,我们要做的事情呢,是这样的几件事情,那首先呢,我们来先判断一下用户是否存在哈,好,那么在这个地方呢,我们先嗯去去做一个,先把这个login VO里面的这个参数都取出来啊,便于后面去使用,所以login vo.get mobile好,然后老again vo.get password,接下来了,Again vo.get user type好,先做这样的一个取值的动作,然后接下来呢,判断这个用户是否存在,判断用户是否存在之前呢,我们得先干嘛呢?先把这个用户呢,给他查找一下啊,查找一看。
08:25
这个有,那么这用户就存在是吧,如果没有的用户就不存在了,所以呢,就是new carry rapper啊,然后这边呢,我们就user in for好,然后我们拿到一个user in for,使用这个user in for per呢,咱们就可以EQ了啊EQ判断谁呢,Mobile在不在好,并且呢,我们还要嗯,继续EQ一下,EQ什么呢?EQ这个user。
09:05
User,注意,这是列面。EQ,这个user type是不是和我们登录的时候选择的这个user type呢是一致的啊,最后呢,我们再查一下base map.select count或者是select one都行哈,那这面呢,我们用到select one,因为因为一会呢,我们要把这个对象里面的这个信息呢,还要还要有有有一些作,还有一些用,所以呢,我们要把这个对象拿出来,然后所以呢,就是select one user query啊,User in for query rapper,这样的话呢,我们就拿到了一个user in for,好,然后接下来呢,我们就可以判断用户是否存在了,怎么判断呢,Aser点啊,Not,那我们说呢,这个user in for呢,应该不为空,不为空呢,就说明户存在user in for,那一旦为空怎么办呢?一旦为空我们直接返回错误了啊,In um response。
10:05
Response,然后点。Log in mobile error啊,就是因为我们通过这个mobile和这个U去登录的时候,我们没有找到这个用户,所以那十有八九就是他这个账号有问题对不对,还有一种可能就是他的和他的这个登录类型不匹配啊,那我们就统一理解为这个账号的录入出现问题了,那这块呢,是用户不存在。的一个情况,接下来呢,我们来看密码是否正确,密码是否正确呢,我们主要就是判断啊,用户输入的这个密码,也就是在login view里面的这个密码和我们拿到的这个密码,也就是说user in four里面的这个密码是否是一致的,所以呢,就a assert点判断两个值是否一致,Equals啊,然后呢啊,用户输入的密码先用MD5做一个加密,MD5点加密,然后用户输入的密码和谁来比较呢?和数据库里面取出来的密码进行比较,数据库里面取出来密码本本身是已经加密成功的啊,加密完成的,如果这两个密码一致,那么我们就校验正确,如果这个密码不一致,那么我们就弹出这个错误,response.in response in um,然后点。
11:29
啊,老password I这个是密码错误哈,好,然后呢,这是密码的一个校验,交完密码之后呢,我们校验一下用户是否被禁用啊,Ser啊,第2EQUALS,好啊,用户是否被禁用呢,我们判断的是userin for里面的get status status,如果等于零的话呢,就是用被禁用了,所以呢,用userin for。
12:03
用user in for里面的常量c normal比较,如果这个用户的状态等于正常状态的话,就说明呢,这个用户呢是没有问题的啊,但是如果一旦它不等于正常状态了,这个意思en um,然后点叫老E。A locked,用户被锁定好,这个是判断用户是否被禁用,最后我们记录登录日志,然后,所以呢,New user look user log in record好,我们生成一个user log in record,接下来呢,User log in record.set user ID userin for.get。ID。好,这样的话呢,我们把这个登录日志就和我们的啊user info就做了一个关联,对吧,他们两个是啊,这个多对一的关系,或者是说呢,用户啊和日志是一对多的关系,对不对?好啊,一个用户每一次登录都会产生一条日志啊,然后user log in record.set IP啊,等于IP啊接下来呢,我们是user login。
13:30
嗯,Map,我们得注意一下。看这面啊。Private private user。Love in record。好,然后接下来呢,是。
14:00
User log in record map,嗯,我们直接调用它的in search方法啊,把这个user log in record呢给它插入进去就可以了,好,最后呢,我们生成token,生成token的话呢,刚才我们引了一个叫j wt us的这么一个工具类,然后呢,我们直接就create token就可以了,可token呢,它需要两个参数,一个是user ID,一个呢是username可以看到哈,这个地方一个是user ID,一个是username,所以呢,我们就user in full.get ID,然后user in four.get name。好,然后呢,我们就可以生成这个token了,生成完token之后呢,我们去组装我们的啊,User in for VO对象,所以在这边呢,我们new user in for。VO,好,然后接下来呢,我们user in for vo.set啊,Token啊,第一个我们先把token它设置进去,好,然后接下来呢,我们再设置其他的这个值,Userin food.setname呀,啊,Name这块我们用user in for.get。
15:19
Name哈,然后user in four点还有一个site nickname呀,我们用user in four.get name啊,然后另外呢,还有一个,当然你可以去做对象拷贝啊,这面我就一个一个写user in for啊,后面写错了,VOVo.S。头像had image user in four.get had image啊,User in four vo.set mobile,然后呢,这块呢是user in for.get mobile。
16:04
然后呢,最后一个user in for vo.set user type user in for.get。这个user type好像是。前面有是吧,直接拿出来啊。Get。User in for.get是不是也可以啊,都行啊,包括这个mobile也是一样的,你看前面都有,我就直接拿出来。啊,这样去定义也可以,对不对,好,那这块呢,就是我们生成透的一个过程,最后呢,我们把UC音符返回U色音符VO,好,那这个整个就是我们的一个用户登录的一个流程了,然后接下来,因为后面登录完了之后,我们要记录一个这呢啊要记录一个登录日志,所以呢,我们也把它,嗯作为。
17:03
一个这个给它返回吧,啊,就是作为一个事物给他管理起来,Back for,嗯,Exception their class。好,这样的话,这边我们就写好了,我们再来回顾一下整个的这个内容啊,就是首先呢,去拿到这样的几个成员信息,然后呢,根据这个成员信息呢,我们先把mobile和user type作为查询条件,查询一下这个类型的这个手机号的用户是否存在,如果不存在的话呢,直接就报告错误了啊,如果存在的话呢,我们再比较一下密码是否正确啊,密码如果正确了的话呢,我们就再看一看用户是否被禁用,用户如果没被禁用的话呢,我们再记录登录日志,好日志登录,呃,记录成功之后呢,我们再生成token,利用生成的token呢,我们组装一个user info view对象,那么这个user info view对象会在我们的controller层。
18:06
会在我们的controller层作为一个user INF for啊,返回回来,返回来之后呢,我们把它传递给我们的前端,这样的话,我们前端拿到这user inform,他可以做各种各样的事情,比如说展示用户啊,比如说根据用户的类型判断这个啊用户要给用户显示哪个导航啊等等等等,都可以通过这个u info VO里面拿到啊好,那这块呢,就是我们的一个接口的一个实现了。
我来说两句