Go-Gin-使用jwt进行token登录校验Vue
本篇文章主要介绍Gin框架实现token前端登录验证的流程,前端框架采用Vue3,后端采用Go,技术用到的有jwt
环境搭配
"github.com/dgrijalva/jwt-go"
我们需要导入以上的jwt的包
go get -u github.com/dgrijalva/jwt-go
运行上述代码
数据准备
之后我们需要在model包里面新建一个数据流,后面我们会用到这个
type Claims struct {
Username string `json:"username"`
Password string `json:"password"`
jwt.StandardClaims
}
代码-生成token
之后在主函数中声明一个创造Token的函数
func GenerateToken(username, password string) (string, error) {
//设置token有效时间
nowTime := time.Now()
expireTime := nowTime.Add(3 * time.Hour)
claims := model.Claims{
Username: username,
Password: password,
StandardClaims: jwt.StandardClaims{
// 过期时间
ExpiresAt: expireTime.Unix(),
// 指定token发行人
Issuer: "gin-blog",
},
}
tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
//该方法内部生成签名字符串,再用于获取完整、已签名的token
key := "sahjdjsgaudsiudhuywge"
var keys []byte = []byte(key)
token, err := tokenClaims.SignedString(keys)
return token, err
}
上述的key我随便写的
代码-接收token
值得注意的是我前端采用的是Vue,所以用户信息之类的都在Request Payload中,所以Go读取这个区域的数据代码如下
ctx.Request.Body.Read
主要是用于读取流数据的函数ioutil.NopCloser
就是将一个不带 Close 的 Reader 封装成 ReadCloser,我们在操作req *http.Request
和response *http.Response
的时候,有时候需要读取Body,但是读了之后Body里面就被清空了,因此我们需要将读取的内容又重新赋值给Body。它的类型为io.ReadCloserjson.Unmarshal
将数据结构转化为json字符串json.marshal
将json字符串转化为数据结构
buf := make([]byte, 1024)
n, _ := ctx.Request.Body.Read(buf)
ctx.Request.Body = ioutil.NopCloser(bytes.NewReader(buf[:n]))
j := buf[0:n]
fmt.Println("body:", string(j)) //获取到post传递过来的数据
admin_admin := Info{}
err := json.Unmarshal(j, &admin_admin) //结构体字段变量名字必须大写,不然无法转码
fmt.Println(admin_admin.Username)
if err != nil {
fmt.Println(err)
return
}
代码-解析token
func ParseToken(token string) (*model.Claims, error) {
//用于解析鉴权的声明,方法内部主要是具体的解码和校验的过程,最终返回*Token
tokenClaims, err := jwt.ParseWithClaims(token, &model.Claims{}, func(token *jwt.Token) (interface{}, error) {
return keys, nil
})
if tokenClaims != nil {
// 从tokenClaims中获取到Claims对象,并使用断言,将该对象转换为我们自己定义的Claims
// 要传入指针,项目中结构体都是用指针传递,节省空间。
if claims, ok := tokenClaims.Claims.(*model.Claims); ok && tokenClaims.Valid {
return claims, nil
}
}
return nil, err
}
总结:基于Go的token验证机制如上述
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfiake
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01