Jwt-go创建Token验证Token

token 设置

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

设置jwt 函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package common
import (
"demoGin/model"
"github.com/dgrijalva/jwt-go"
"time"
)

var jwtkey = []byte("jwttoken")

var myconnecttoken = "token:mytoken"

type jwtModel struct {
UserId uint
jwt.StandardClaims
}

/*
@设置token jwt
*/
func ReleaseToken(user model.User)(string,error) {
outtime :=time.Now().Add(7*24*time.Hour)
jwtclaims :=jwtModel{
UserId: user.ID,
StandardClaims: jwt.StandardClaims{
ExpiresAt:outtime.Unix(),
IssuedAt:time.Now().Unix(),
Subject:myconnecttoken,
},
}
token :=jwt.NewWithClaims(jwt.SigningMethodHS256,jwtclaims)
tokenStrng,err :=token.SignedString(jwtkey)
if err !=nil{
return "",err
}
return tokenStrng,err
}
/*
@解析token
*/
func ParseToken(tokenString string)(*jwt.Token, *jwtModel,error){
jwtClaims := &jwtModel{}
token,err :=jwt.ParseWithClaims(tokenString,jwtClaims, func(token *jwt.Token) (i interface{}, e error) {
return jwtkey,nil
})
return token,jwtClaims,err
}

中间件处理使用jwt-go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

/*
@接收token
*/
tokenString := ctx.GetHeader("Authorization")

/*
@token中会默认加上Bearer 和空格这七个字节
*/
if tokenString =="" || !strings.HasPrefix(tokenString,"Bearer "){
response.Respose(ctx,http.StatusUnprocessableEntity,422,nil,"权限不足1")
ctx.Abort()
return
}
tokenString = tokenString[7:]
/*
@解析token
*/
token,claims,err :=common.ParseToken(tokenString)
if err != nil{
response.Respose(ctx,http.StatusUnprocessableEntity,422,nil,"权限不足2")
ctx.Abort()
return
}