Go中Token的小小实践 | 青训营

58 阅读2分钟

前言

之前几篇记录了一下Go中整合数据库、缓存等组件的用法,这篇也简单记录一下Go中使用Token的一些小小理解和实践

正文

第一步,引入依赖

go get -u github.com/dgrijalva/jwt-go

这里还是很简单,就是相当于将外部的依赖,引入到自己的项目中

第二步,编写配置文件

jwt:
  secret: xxxxx
  jwt_ttl: 10 #单位小时
  refresh_grace_period: 1800 #token自动刷新时间

这里就是配置一下jwt中的一些相关设置

第三步,定义一个jwt的结构体

type Jwt struct {
    Secret                  string `mapstructure:"secret" json:"secret" yaml:"secret"`
    JwtTtl                  int64  `mapstructure:"jwt_ttl" json:"jwt_ttl" yaml:"jwt_ttl"`
}

Secret:表示密钥

JwtTtl:表示token的有效时间

第四步,编辑一个中间件,用来解析token

image.png

简单说一下逻辑

这里主要就是定义了一个方法:

首先通过传递过来的参数,去到token这个参数

如果不存在,那么直接返回错误

接下来通过调用jwt中的方法,进行解析,如果解析出现错误,那么返回错误

之后基本上就验证完毕了,然后我们在定义接口的时候,在需要进行权限校验的接口中,注册这个中间件就行了

就像这样:

image.png

这样在这个Group中的接口,进行访问的时候就需要权限的校验了

第五步,登录的时候创建一个token

image.png

还是简单说一下这里的逻辑:

首先是定义了一个token对象

其中Issuer这个字段是非必须的

然后这边通过token.signedString这个方法获取token的字符串,然后为了方便后面的接口通过token获取用户信息,我们新建立了一个协程,用来将本次生成的token和用户的id存储到redis中,后面我们就可以通过客户端传递过来的tokenredis中拿去用户的信息了,这里也可以将用户的信息整体全部存储,都可以哈。

这样我们就生成了一个token

第六步,通过token获取用户信息

image.png

这里面就比较简单了,直接通过redis拿即可

以上就是对token的一个小小操作,也算是一个小demo

结语

青训营马上就到尾声了,希望我能不掉队,和队友一起完成大项目!

冲冲冲!