工具代码
package tool
import (
"github.com/dgrijalva/jwt-go"
"time"
)
var jwtSecret = []byte("43286a86706620e38c333cdd4c496355")
var ExpirationTime time.Duration = time.Second * 20
type Claims struct {
jwt.StandardClaims
AdditionalData map[string]string
}
var attribute = map[string]string{}
func init() {
attribute["userName"] = "adasd"
attribute["id"] = "12"
attribute["password"] = "asdfg"
}
func GenerateToken() (string, error) {
nowTime := time.Now()
expireTime := nowTime.Add(ExpirationTime)
claims := Claims{
StandardClaims: jwt.StandardClaims{
ExpiresAt: expireTime.Unix(),
Issuer: "Gst",
},
AdditionalData: attribute,
}
tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
token, err := tokenClaims.SignedString(jwtSecret)
return token, err
}
func ParseToken(token string) (*Claims, error, map[string]string) {
claims := &Claims{}
tokenClaims, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) {
return jwtSecret, nil
})
message := map[string]string{}
for key, value := range claims.AdditionalData {
message[key] = value
}
if tokenClaims != nil {
if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
return claims, nil, message
}
}
return nil, err, nil
}
测试代码
package test
import (
"beego_test/tool"
"fmt"
"testing"
)
func Test_jwt(t *testing.T) {
token, err := tool.GenerateToken()
if err != nil {
fmt.Println("加密失败")
return
}
fmt.Println("加密字符串为", token)
_, _, message := tool.ParseToken(token)
for key, value := range message {
fmt.Println("key value", key, value)
}
}