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 }