package tools import ( "time" "github.com/dgrijalva/jwt-go" "github.com/pkg/errors" ) const ( jwtSecretKey = "@MKU^KNGTF%K^#VJ 0 { claims["exp"] = time.Now().Add(exp * time.Second).Unix() } claims["aud"] = userID claims["iat"] = time.Now().Unix() token.Claims = claims tokenString, err := token.SignedString([]byte(jwtSecretKey)) if err != nil { return "", err } return tokenString, nil } func CheckJWT(tokenStr string) (bool, string, error) { token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) { return []byte(jwtSecretKey), nil }) if err != nil { validationErr, ok := err.(*jwt.ValidationError) if !ok { return false, "", err } if validationErr.Errors == jwt.ValidationErrorExpired { return false, "", nil } return false, "", err } claims, ok := token.Claims.(jwt.MapClaims) if !ok { return false, "", errors.New("类型转换失败") } userID, ok := claims["aud"].(string) if !ok { return false, "", errors.New("类型转换失败") } return token.Valid, userID, nil }