github.com/glide-im/glide@v1.6.0/pkg/auth/jwt_auth/jwt.go (about) 1 package jwt_auth 2 3 import ( 4 "errors" 5 "github.com/golang-jwt/jwt" 6 "time" 7 ) 8 9 var jwtSecret = []byte("glide-jwt-secret") 10 11 type Claims struct { 12 jwt.StandardClaims 13 Uid string `json:"uid"` 14 Device string `json:"device"` 15 Ver int64 `json:"ver"` 16 } 17 18 func genJwt(payload Claims) (string, error) { 19 expireAt := time.Now().Add(time.Hour * 24) 20 return genJwtExp(payload, expireAt) 21 } 22 23 func genJwtExp(payload Claims, expiredAt time.Time) (string, error) { 24 payload.ExpiresAt = expiredAt.Unix() 25 token := jwt.NewWithClaims(jwt.SigningMethodHS256, payload) 26 27 t, err := token.SignedString(jwtSecret) 28 if err != nil { 29 return "", err 30 } 31 return t, nil 32 } 33 34 func parseJwt(token string) (*Claims, error) { 35 j := Claims{} 36 t, err := jwt.ParseWithClaims(token, &j, func(token *jwt.Token) (interface{}, error) { 37 return jwtSecret, nil 38 }) 39 if err != nil { 40 return nil, err 41 } 42 jwtToken, ok := t.Claims.(*Claims) 43 if !ok { 44 return nil, errors.New("parse jwt error") 45 } 46 return jwtToken, nil 47 } 48 49 func genJwtVersion() int64 { 50 return time.Now().Unix() 51 }