00:01
各位大家好,刚才呢,咱们把登录的接口做了一个初步实现,然后实现之后呢,里边有两个地方需要完善,第一个地方就是咱们需要发送手机验证码进行校验,第二个生成token,那咱们下面先把token自我生成,然后最后再来完成手机验证码的发送,那token是什么呢?给各位做个说明,我们先做个介绍。刚才我提到token的作用是什么呢?是用于判断啊,我们这里边是否是一个登录,Token里边可以存入一些登录的信息,那这里边具体什么意思,给大家画个图,我来做个解释,比如说咱们用一个工具来生ton,那我们来说一下,比如说我现在啊,我在这里边我们完成了这么一个登录。然后完成登录之后呢,然后可以生成这么一个字符串,注意是一段字符串,然后字符串中呢,会包含咱们的用户信息,这些信息中比如说有咱们的用户名等信息,而这个字符串列为就是咱说这个token那字串生成,假如说我现在啊生成这么一个字符串,里面包含用户名加单是Lucy,然后后面比如加个井号,后面比如说加上我这个用户那个IP地址,假如是这个192.168.1.1等等这些信息。
01:24
比如说咱目前是这个内容,那我们现在动了之后,我们就生成这么一个字符串,然后这个字符串呢,怎么做呢?其实我们现在可以把它放到咱们当天请用这个hi的里边,比如我们的请求图里边去。请求投中,而我这里边,比如说现在投N里边呢,包含咱们这个信息,同时它也放到我的请求投中,而咱后面的就是每个请求操作,如果说然后进行这个登录的一个判断,就是判断你是否登录,那怎么做,咱们只需要在我的这个请头头里边来查看一下是否包含咱们这个token的字符串,如果说包含的话,我们就是对这个字符串。
02:10
做这么一个校验,看它是否是咱们生成的这个to,比如说是否是我们这个规则to,比如说别人要伪造token,那咱看一下是不是按照我们的规则做到的,只有是我们的规则token,再让他才做这个校验,就是里边有这个数据,有这ton,同时是我们的规则,那我们就表示目前就是一个登录状态,咱们再进行恰操作,如果这个值得不到,并且不是我们的规则生成ton,那我们表示目前就没有登录,咱需要再进行登录。另外这个token呢,咱也能设置它这个有效时间。比如说我设置token是30分钟有效,当超过30分钟这个值,就算我得到它也是一个失效状态,所以这个token主要作用就是做这个事情,第一个里面能存储咱们的用户信息,比如说用户名,然后第二个。
03:04
它能判断我当前是否是一个动物状态,比如说咱放到情物头里边,然后判断,或者说你也可以放到我们的cook里边,或者说你在地址栏中直接传递都可以。这个就是token的这么一个作用。各位把律知道,而token生成刚才我提到咱们需要按照一定规则生成,而这规则怎么样不确定,当然这规则你可以自己约定。而在我们开发中呢,有一种通用一个工具,它叫做DWT工具,而DWT是什么呢?它要给咱们约定好了一种规则来用GWT可以帮我们生成这么一段token的字符串,所以咱们下面在我们的项目中,我们就采用GWT的方式来生成这么一个token的字母串。所以这是关于token的一个进介绍,咱后面在登录过程中会用到这个token,包括做存储,包括做登录的判断,那下面咱大家看一下这个DWP刚才提到它是一个工具,它全称叫做Jason web ton是为了执行一种基于Jason的一种开放的标准,就是按照一定规则给咱们生成一个字符串,而GWT的作用就是对token信息做一个防伪的作用。
04:24
什么叫防伪呢?比如现在我们自己预定规则,那规则怎么样,别人可能能猜到,包括按照规则,比如它可以伪造的信息,用GWT,它能起一个防伪的作用,比如咱根据里边的某些字段做一些加密,做一些编码处理,为了做一个防伪的这么一个标志。这个叫JWT,而JWT它是怎么一个组成呢?我看中写到大家看到啊,JWT呢,一共有三部分组成,就是里边的这三部分,然后把三部分给各位叠出来,咱们来看一下啊,它里边有这么三部分组成,也是里边的这个部分。
05:05
比如说啊这个。我先保存一下啊,然后咱们。重新画一个新的图给大家说一下啊,它的这么一个结构。然后各位看啊,有这么三部分,首先第一部分是GT这个头信息部分,里边是一个公共的,比如说目前是一个GFT格式,它用什么编码方式,然后第二部分是它的主体部分,也就是里边可以包含你的,比如用户ID,用户名称,第三部分有一个词,它叫做签名哈希。什么叫签名哈希呢?就是这一部分啊,设置我最终把这个字符串要生成什么样的格式,然后格式中按照什么方式做个编码,或者做个加密,然后把这个字母串最终再做一个叫贝斯64的这么一个编码,编码之后就生成咱们最终能看到这么一段token的字符串,这就是GWT一个基本规则,我再重复一遍啊,三部分组成,第一部分投信息,就是它的公共部分,第二部分是你的用户信息,就是主体部分,比如说你的用户名用外地。
06:16
第三部分叫签名哈希,就是表示设置按照什么方式进行编码,编码之后变成什么样的格式,最终在进行贝特64之后,就看到我们的这么一种形式,这就是token字符串的这种规则,再用JWT把它给生出来,比如里边刚才咱们说到的这么一个结构,所以咱们现在就这么来做,当然在实际中不这么做也可以有一点特别强调啊,就是这个GFT呢,它只做了贝64编码,并不是加密,咱用工具可以把它的加密,就是编码之后内容带给它解码成我们能看懂的明文标志,所以实际中就这个token这字符串,咱也可以自己给它做个加密,所以咱们现在就用普通方式给他做一下就可以了,大家知道这个特点。
07:06
然后咱们下面呢,就在项目中整合进去这个GWP做一个就是token的生成,那怎么整合呢?给各位来强调一下啊,首先第一个,因为这个token这个字符串,咱在后面的很多地方都要用到,所以咱为了方便把它就放到咱的common里边,在common中呢,首先第一步我们先引入它的相关依赖,就是JWT的依赖,那依赖我从课件中直接复制了,就是里边的这个依赖。然后把依赖我就放到这个common u里边。引入依赖,这是里边的第一步,给各位知道引入它的依赖,然后引入依赖之后呢,我在这里边就加上一个GWT的这么一个工具类,为了咱们后便特的方便,因为它的写法是固定的,各位不需要敲一遍,你把我课件中的工具类拿过来能看懂,然后改成你的效果就可以了,那比如说我建个包,只要这个。
08:06
Helper,然后在helper里边呢,我创建一个工具类,就是用到JWT的工具类,比如我叫j wt helper。这个再拉过来,然后我把课件中这个类给它就直接复制过来。就是里边的这么一个结构。把它拿回来,咱们把它相关的依赖引入,我带着各位把这个咱们详细看一下,看这个内终主要写了哪些内容,包括每问什么含义,以及最终咱会做一个测试。现在依赖我们先给他勾,比如进来,比如咱会做一个详细说明,这是什么意思?给他先引住啊,我们一个个给它引用进来。现在你看可以了啊,然后咱们看一下工具类里边什么意思啊,首先第一个在工具类中呢,我这位置一共写了有这么三个方法,咱们看三个方法啊,首先第一个方法,这个方法什么意思呢?它就是根据我们这个字符串,然后生成一个OK,然后你看我方法中有两个字符串的这么一个参数,就根据参数生成。
09:15
咱们看两个参数啊,第一个用户ID,第二用户名称,然后这个最终会生成一个同音字母串,就是GWT这个规则,然后里边还有第二个方法,大家看这个方法啊,这个方法什么意思呢?它就是根据咱们的token字符串得到里边这个用户的ID,单据ID生成字符串,字符串就能把这ID再得到,然后第三方法跟这个类似。就是根据token字符串得到我们那个用户的。名称,比如你根据Lucy生成一个token,根据Mary生成token,然后把名称可以得到,这是里边的三个方法,然后在最上面还有两个就是固定值,第一个值是什么呢?大家看这个啊,叫token什么意思?它就表示token那个过期时间的设置。
10:06
什么叫过期时间?比如现在我设置token是30分钟,一小时或者多长时间设置,注意这个单位是一个毫的单位,然后第二个是什么呢?是以那个剖开那个签名的这么一个密钥。比如说他根据这个密钥做一个编码,做一个签名,或者做一个加密,这是两个固定值,这也可以自己做设置,然后咱们这个做了一个总体介绍,下面咱看一下具体方法啊,第一个方法生成ton,然后里边怎么做呢?大家看啊,首先方法中用这个g wts build,就创建第一部分是它这个subject,就是它的分类啊,这是资源起的名字,然后这一部分,所以各位应该能看懂啊。什么意思啊?是不是设置它这个过期时间呀,这是我们的当前时间加上它这个过期时间,最终这个时间如果达到,那它就过期了,比如说设置了30分钟当前时间往后再延长30分钟就是它的过期时间,当达到这个时间,这个字符串就不能用了,然后下面这部分是它的主体信息,包含用户,外地包含名称,当然你可以设置多个,我这里以两为例,最后一部分就是咱说那个签名哈希根据这个值做一个编码这个处理,那这时候关于我们生成token怎么方法不需要各位记各位以后用的话,改的话也就是改里边那个。
11:32
Subject,包括你这个具体这个内容。然后第二个就是得到ID和名称,这两个一样,大家看啊,首先判断是不等于空,如果等于空,直接对退不等于空,我们就是用这个g wts Python解析得到里面这个值,然后里边把这个UCIID,还有这个u name得到,因为你看这里边我们设置值叫UCIID和name,所以根据它的K把它的值就能得到,这是我们写到三个方法,然后最后呢,我还写了一个main方法,或者做测试,在测试中大家看啊。
12:07
前两行代码什么意思?是根据一和这个啊,比如咱换一个名字Lucy,生成token,然后根据token得到ID,还有我们的用户名称。所以这是一个GWT工具类,我们做了一个说明,各位把它直接复制用就可以了,然后这个说完之后,我们现在把这个几个方法测试一下,咱们看一下它最终的输出结果是什么样的,我们来看一下啊,咱们看最终的输出。然后大家看啊,首先第一个就是头文字符串就这段值,然后第二部分有这个ID,包括它的名称,然后第一个字符串部分呢,比如说咱们可以这么来看一下啊,它这个字符串部分这里边,假如我为了方便我建一个。T文件。然后在里边呢,我把这个token字符串给它拿过来,然后大家跟我一起来看一下这个字符串里面的一个特点。
13:06
各位看到啊,咱们说到token字符串由就是JWT生成的ton字符串由几部分组成?刚说过是不是有三部分,第一部分头信息,第二个主体,第三个是不是叫天文哈希呀,而你看这部分中,它是有三部分,中间是不是用点隔开,有,这就是第一部分,这是第二部分,这是第三部分,所以最终它是做了一个贝,是64编码之后的这么一个结果,所以这是关于我们用GWT生成出来的token字符串,这个我们就整合到咱们的项目中的。然后这个做到之后呢,咱们下面就可以把咱的代码就完善,比如是咱们刚才里边的那个service中那个生成token部分给它最终翻译出来,那我来写一下啊,咱们找到刚才那个代码的。Service部分我把它先打开,咱们找到。
14:02
也就是里边的这个部分,在这个部分中呢,咱们现在就来使用这个GWT。来生成这个token的。字符串,那我们来生成一下啊,调用刚才咱们说那个工具类,叫做j wt helper,然后在里边有个方法,刚才咱们刚用过叫create to,里边传入两个值,第一个就是用快递,那我们通过这个user INF for把它得到,因为咱不管是等于空不等于空,这值应该都有我们user info.get这个ID。第二个是用户名称,用户名称我这里边也给它设置了一个值,然后最终它会返回一个字符串,就是我们说那个to开,把to开,最终咱给它串到这里边,然后做一个返回。这样的话,咱们把service里边这个过程就做了一个完善里边的这个结构。
15:00
所以现在呢,咱就完成这个登录中生成token的这个部分,把JWT生成token整合到了我们的项目中来,这个咱们就完成了啊,然后完成之后呢,咱们下面啊,把这个接口我们先做一个简单测试,然后咱再往后进行。那测试怎么做呢?或者说各位是否记得啊,咱们之前测试接口都是用的什么?是不是那个叫swagger,所以现在我们还这么来做,那现在我把这个服务咱们给它先提起来。咱们现在是一个新的一个服务模块,而这个服务我们目前用的端口号这个8203,就咱一会儿用8203把它做这么一个swag的测试,那我现在把这先清起来。咱们等他先启动第一次要卖点啊,咱们稍微等一会儿,我们用8203这个访问。
16:00
然后大家看目前呢,是不是已经清起来了,启用之后咱们来做访问,我在里边直接访一下啊,Local house的8203,加上这个swa。杠ui.html这就是swa了,反路径,然后在里边找到咱的CTR了,是这个啊,当然你可以加上中文的这个注释,我就不加了,各位给它完善出来,然后在里边有咱们刚才这个接口,就是API user烙印是不是都存在了,然后在里边呢,我们做过测试,它的测试中呢,因为我们这里边呢,大家看啊,我们在CTRL里边呢,咱是写上了。这么一个东西叫快的body底,所以咱们是不是用Jason形式来传数据了,所以里边我们就传一段这些数据,那数据中咱目前呢,应该说只需要一个这个phone就可以了啊,咱就直接传一个啊,比如说随便写一个point。我们来一个手机号,我就随便写一个,先测试一个数据库中不存在的,那比如写一个。
17:06
随便来一个啊。然后这个扣随便写个值,比如说123456,现在我们有这数据,这些数据在我的数据库中目前肯定是不存在的,就为了明显它里边其他值先给它去掉。这手机号是我随便写的啊,因为目前里没有,然后现在呢,我就点击这个try out,咱们看一下目前这个过程是怎么样的,那现在我点一下。然后大家看目前这个结构在这里边,最终你看到是不是返回咱数据,然后数据终包含咱们的用户名,就手机号嘛,因为咱别的值没有,然后第二份偷开是不是咱们这个字符串是不是就有了,然后咱们在数据库中看一下。这数据是不是也加进去了,所以目前就完成这么一个操作啊,这是我们完成的这么一个内容,比如说第一次肯定是他会加到数据库中,然后第二次我们再点击这支是不是直接返回,然后现在在我数据库中,因为还有这条数据,因为它不会重复加多次。
18:09
所以这样的话呢,咱们就完成了手机登录接口的这么一个。Ton字符串的整合,这个就完成了,完成之后呢,最后在接口中来缺少的就是这个东西,通过。手机要进行一个验证码的发送,包括校验,那咱们一会儿要通过整合阿云的短信服务,把这功能做个完善,目前我们先开到这里。
我来说两句