1. 项目地址:
    https://github.com/golang-jwt/jwt

  2. 用法:

     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