第一个基于go-gin框架的项目(二)

继续上周的部分开始写起

在这里插入图片描述

圖中先对学号进行md5加密:调用utils包中的方法时,传入的参数是string,所以先对int类型的Id转为string,然后进行加密
这时候去缓存调用方法判断redis中是否存在key为加密后的学号
如果存在,则将其序列化然后取出,

在这里插入图片描述

这个函数大体同上,主要调用在这里插入图片描述
接受一个空接口类型数据,返回一个byte类型切片。
回到最上面,这时候声明下面这个结构体在这里插入图片描述
通过json.Unmarshal方法解码json格式的数据,即:将[]byte类型的数据转为UserData结构体类型的数据。
如果成功则返回下图所示的结构体作为data返回给前端。
在这里插入图片描述

在这里插入图片描述

如果用户是第一次登陆,则调用下面的方法
在这里插入图片描述
该方法的作用就是:从数据库中获取用户常用信息并返回,在其中有一个方法比较重要:
在这里插入图片描述
生成token:
在这里插入图片描述
在这个函数中,初始化了下面的这个结构体在这里插入图片描述
使用 jwt.NewWithClaims方传入指定算法和载荷内容,得到指针类型的token然后调用SignedString方法得到字符串token并将其返回给前端
接下来就是使用sqlx到数据库查询数据,将查询到的数据存到传入的第一个参数里。

在这里插入图片描述

调用下面的ToRedis方法:key是经过md5加密后的id
在这里插入图片描述
最后返回的是一个实例化后的结构体对象,该结构体只有一个属性。

登录接口就写完了,接下来看后端环境中一些前面没有写到但是还需要注意的地方 —— 错误处理

在这里插入图片描述

先看code文件:
在这里插入图片描述
在这里插入图片描述
里面都是这种变量,所以整体被var()包括着。&表示的是取地址。

接下来就是第二个文件errno:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这两个函数联合使用,判断是哪一种错误类型,针对不同类型返回不同数据:具体理解可以参考下面的例子。
接下来是工具包中的md5加密以及对密码进行md5加密然后与从数据库中取出的加密后的md5进行判断

然后是读取excel表格方法:

  • 第一步: 声明一个结构体在这里插入图片描述

  • 第二步:使用地址存储需要从哪儿读取excel文件
    在这里插入图片描述

  • 第三步:读取其实极为简单主要分两部分。先读取地址,获取到之后,逐行便利,第一行排除。

在这里插入图片描述

  • 对每一行每一列进行判断
    在这里插入图片描述
    固定的数据写在后面
    在这里插入图片描述
    每读取一行就开启一个goroutine来朝数据库存值。
    在这里插入图片描述
上传文件方法

在这里插入图片描述

c.Request.FormFile()方法在圖中有注释,然后根据“.”对header.Filename进行分割,获取到上传文件的后缀。文件名则是根据uuid生成一个通用唯一标识码。UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息

在这里插入图片描述

创建一个文件,制定好路径和文件名字及后缀。
最后defer文件的Close方法即:使其不能用于I/O

在这里插入图片描述> 将用户上传的文件copy到新创建的文件中,返回地址给前端。

对响应数据进行封装

在这里插入图片描述

封装也是主要体现在少写代码上。

還有一點需要注意:

在这里插入图片描述

  • c.GET获取提前存到context中的数据,取出后需要对其进行断言,才能使用。第二行便是断言的格式。
  • 断言的位置是在进行jwt中间件认证时成功之后把有关用户的相关信息放到了context中。
  • 如下:
    在这里插入图片描述

首先它返回的是一个方法:
从请求头中获取key为Authorization对应的value
分几种情况:
①如果为空,则返回;其中c.Abort()常常与return结合使用,表示的意思是:这次请求就到这里了,顺着return返回出去。
②如果有内容,则对其进行分割,但是如果分割之后的内容不符合条件则返回错误
③成功则开始解析token,调用下面的方法:
在这里插入图片描述
解析token主要使用jwt.ParseWithClaims方法,传入token,以及token对应的结构体。一句话就是:生成token与解析token是一一对应的,返回的是token类型的指针和一个错误
对其进行验证:是否存在以及时间是否还在有效期内,如果都符合条件则进行下一步:
对其进行md5加密返回加密后的string,加密时:
将学号加盐密然后转为[]byte类型之后进行md5加密在这里插入图片描述
之后
在这里插入图片描述
对其调用redis操作获取对应的userData
在这里插入图片描述
这时候对其进行断言
在这里插入图片描述
将从redis中取出的userData断言为authDao.userData类型的结构体数据,并将其存入到上下文中,这时候调用c.Next()使请求转入下一个中间件。

基于casbin的权限认证系统

考虑到不同人在不同社团有着不同角色实现着不同权限,所以加入域在其中
使用配置文件存储策略
在这里插入图片描述
使用中间件对用户请求进行判断
在这里插入图片描述
返回的是一个方法:
先获取请求的uri,然后获取请求方法,然后从context中取出用户基本信息并对其进行断言。
如果这步失败就让用户重新登录。
目的在于获取用户id
获取域
在这里插入图片描述
对其分成两类,一是get请求,加入默认值,其他请求则通过Param的方法来获取数据
在这里插入图片描述
去数据库查找政策。如果成功,则挂起继续向下执行,反之返回错误。
在这里插入图片描述
这段代码的作用主要是加载适合特定数据库的适配器,以及与数据库建立连接并且加载相关规则。

至此,第一版基于gin框架的项目环境基本讲解完毕,其中有着极大不足和不适。但成熟的萌芽已在其中,我接下来还会再讲两个环境搭建的格式,都对前者有着较大的改进和对新功能的汲取。继续大家继续关注。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值