github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/http/jwt/jwt.go (about)

     1  package jwt
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/dgrijalva/jwt-go"
     6  )
     7  
     8  // Jwt Sign Method.
     9  type JwtSign struct {
    10  	Key string
    11  }
    12  
    13  // Gen generate jwt token.
    14  func (j *JwtSign) Gen(payload map[string]interface{}) (string, error) {
    15  	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims(payload))
    16  	tokenString, err := token.SignedString([]byte(j.Key))
    17  	if err != nil {
    18  		return "", err
    19  	}
    20  	return tokenString, nil
    21  }
    22  
    23  // Parse a JWT token.
    24  func (j *JwtSign) Parse(tokenString string) (map[string]interface{}, error) {
    25  	t, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
    26  		if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
    27  			return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
    28  		}
    29  		return []byte(j.Key), nil
    30  	})
    31  
    32  	if err != nil {
    33  		//if ve, ok := err.(*jwt.ValidationError); ok {
    34  		//	if ve.Errors&jwt.ValidationErrorMalformed != 0 {
    35  		//		// That's not even a token
    36  		//	} else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 {
    37  		//		// Token is either expired or not active yet
    38  		//	} else {
    39  		//		// Couldn't handle this token
    40  		//	}
    41  		//}
    42  		return nil, err
    43  	}
    44  
    45  	payload, ok := t.Claims.(jwt.MapClaims)
    46  	if ok && t.Valid {
    47  		return payload, nil
    48  	}
    49  	return nil, err
    50  }