项目地址:
https://github.com/golang-jwt/jwt
用法:
package main import ( "fmt" "github.com/golang-jwt/jwt" "time" ) // 生成 func GenerateToken(encryptKey string, expireHours, uid int) (string, error) { expire := time.Duration(expireHours) exp := time.Now().Add(time.Hour * expire).Unix() token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "uid": uid, "exp": exp, }) tokenString, err := token.SignedString([]byte(encryptKey)) return tokenString, err } // 解析 func ParseToken(encryptKey, tokenString string) (int, bool) { token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } return []byte(encryptKey), nil }) if err != nil { return 0, false } if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { if uid, ok := claims["uid"].(float64); ok { return int(uid), true } else { return 0, false } } else { return 0, false } } func main() { encryptKey := "test key" if token, err := GenerateToken(encryptKey, 1, 100); err != nil { fmt.Println(err) } else { fmt.Println(token) uid, ok := ParseToken(encryptKey, token) fmt.Println(uid, ok) } } // 输出 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODU3NzUzNDAsInVpZCI6MTAwfQ.EeRMRHXQmPXCaJVIETXV0YyFeQPCVThUQgoP6mgaEnc 100 true
文档更新时间: 2024-04-20 10:57 作者:lee