前言
之前几篇记录了一下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
简单说一下逻辑
这里主要就是定义了一个方法:
首先通过传递过来的参数,去到token这个参数
如果不存在,那么直接返回错误
接下来通过调用jwt
中的方法,进行解析,如果解析出现错误,那么返回错误
之后基本上就验证完毕了,然后我们在定义接口的时候,在需要进行权限校验的接口中,注册这个中间件就行了
就像这样:
这样在这个Group
中的接口,进行访问的时候就需要权限的校验了
第五步,登录的时候创建一个token
还是简单说一下这里的逻辑:
首先是定义了一个token对象
其中Issuer
这个字段是非必须的
然后这边通过token.signedString
这个方法获取token的字符串,然后为了方便后面的接口通过token
获取用户信息,我们新建立了一个协程,用来将本次生成的token和用户的id
存储到redis中,后面我们就可以通过客户端传递过来的token
从redis
中拿去用户的信息了,这里也可以将用户的信息整体全部存储,都可以哈。
这样我们就生成了一个token
第六步,通过token获取用户信息
这里面就比较简单了,直接通过redis
拿即可
以上就是对token的一个小小操作,也算是一个小demo
!
结语
青训营马上就到尾声了,希望我能不掉队,和队友一起完成大项目!
冲冲冲!