Go生成JWT Token

package utils

import (
	"fmt"
	"github.com/dgryski/jwt-go"
	"github.com/gin-gonic/gin"
	"time"
)

type Claims struct {
	UserId int
	jwt.StandardClaims
}

// 自定义一个字符串
var jwtKey = "www.xxyyxx.com"

//var jwtKey = []byte("www.xxyyxx.com")

// 设置Token串
func SetToken(c *gin.Context, userID int) string {
	// 颁发一个有效时间为一分钟的token
	expireTime := time.Now().Add(60 * time.Second)
	fmt.Println(expireTime)
	claims := &Claims{
		UserId: userID,
		StandardClaims: jwt.StandardClaims{
			ExpiresAt: expireTime.Unix(), // token过期时间
			IssuedAt:  time.Now().Unix(),
			Issuer:    "127.0.0.1",  //颁发者
			Subject:   "user token", // 签名主题
		},
	}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	tokenString, err := token.SignedString([]byte(jwtKey))
	if err != nil {
		fmt.Println("颁发token错误!!!!", err)
	}
	return tokenString
}

// 验证Token
func ParseToken(tokenStr string) (*jwt.Token, *Claims, error) {
	Claims := &Claims{}
	token, err := jwt.ParseWithClaims(tokenStr, Claims, func(token *jwt.Token) (interface{}, error) {
		return []byte(jwtKey), nil
	})
	return token, Claims, err
}

// 获取Token
func GetToken(c *gin.Context) {
	tokenString := c.GetHeader("Authorization")
	fmt.Println("前端传的Token串:>>>>>>>",tokenString)
	if tokenString == "" {
		Json(c, 40000003, "权限不足", "")
		c.Abort()
		return
	}

	token, claims, err := ParseToken(tokenString)
	if err != nil || !token.Valid {
		fmt.Println("Token错误>>>>",err)
		Json(c,400000004,"token串错误","")
		c.Abort()
		return
	}
	fmt.Println(claims.UserId)
}

posted @ 2022-01-06 09:54  河图s  阅读(71)  评论(0)    收藏  举报