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  }