gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/myx/tokenutil/token-do.go (about) 1 package tokenutil 2 3 import ( 4 "gitee.com/zhongguo168a/gocodes/datax/mapx" 5 "github.com/dgrijalva/jwt-go" 6 "github.com/pkg/errors" 7 "time" 8 ) 9 10 var ( 11 ErrParseFail = errors.New("token parse fail") 12 ErrIllegal = errors.New("token invalid") 13 ErrExpired = errors.New("token expired") 14 ErrUseNotmatch = errors.New("token use notmatch") 15 ) 16 17 // CreateLater 令牌-创建 18 func CreateToken(info *TokenInfo, hmacSampleSecret string) (t string, err error) { 19 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ 20 "uid": info.Uid, 21 "role": info.Role, 22 "time": int(time.Now().Unix()), 23 }) 24 25 t, err = token.SignedString([]byte(hmacSampleSecret)) 26 if err != nil { 27 err = errors.Wrap(err, "signed string") 28 return 29 } 30 31 return 32 } 33 34 func ParseToken(tok, secret string) (info *TokenInfo, err error) { 35 t, err := jwt.Parse(tok, func(*jwt.Token) (interface{}, error) { 36 return []byte(secret), nil 37 }) 38 if err != nil { 39 return nil, ErrParseFail 40 } 41 info = &TokenInfo{} 42 info.JwtToken = t 43 var tokenMap = t.Claims.(jwt.MapClaims) 44 45 info.Uid = mapx.String(tokenMap, "uid") 46 info.Role = mapx.String(tokenMap, "role") 47 info.Time = int32(mapx.Int(tokenMap, "time")) 48 return 49 } 50 51 // TokenInfo 令牌信息 52 type TokenInfo struct { 53 // 用户id 54 Uid string 55 // 权限 56 Role string 57 // 58 Time int32 59 // 60 JwtToken *jwt.Token 61 } 62 63 func (info *TokenInfo) GetLogObj() (r map[string]interface{}) { 64 r = map[string]interface{}{} 65 if info == nil { 66 return 67 } 68 r["uid"] = info.Uid 69 r["role"] = info.Role 70 r["time"] = info.Time 71 return 72 } 73 74 // Valid 验证token 75 func (info *TokenInfo) Valid(expiredTime int) (err error) { 76 if info.JwtToken.Valid == false { 77 err = ErrIllegal 78 return 79 } 80 81 if time.Now().Unix() > time.Unix(int64(info.Time), 0).Add(time.Duration(int(time.Second)*expiredTime)).Unix() { 82 err = ErrExpired 83 return 84 } 85 86 return 87 }