token_jwt.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package token
  2. import (
  3. "time"
  4. "github.com/dgrijalva/jwt-go"
  5. )
  6. func (t *token) JwtSign(userId uint64, platform string, expireDuration time.Duration) (tokenString string, err error) {
  7. // The token content.
  8. // iss: (Issuer)签发者
  9. // iat: (Issued At)签发时间,用Unix时间戳表示
  10. // exp: (Expiration Time)过期时间,用Unix时间戳表示
  11. // aud: (Audience)接收该JWT的一方
  12. // sub: (Subject)该JWT的主题
  13. // nbf: (Not Before)不要早于这个时间
  14. // jti: (JWT ID)用于标识JWT的唯一ID
  15. c := claims{
  16. userId,
  17. platform,
  18. jwt.StandardClaims{
  19. NotBefore: time.Now().Unix(),
  20. IssuedAt: time.Now().Unix(),
  21. ExpiresAt: time.Now().Add(expireDuration).Unix(),
  22. },
  23. }
  24. tokenString, err = jwt.NewWithClaims(jwt.SigningMethodHS256, c).SignedString([]byte(t.secret))
  25. return
  26. }
  27. func (t *token) JwtParse(tokenString string) (*claims, error) {
  28. tokenClaims, err := jwt.ParseWithClaims(tokenString, &claims{}, func(token *jwt.Token) (any, error) {
  29. return []byte(t.secret), nil
  30. })
  31. if tokenClaims != nil {
  32. if c, ok := tokenClaims.Claims.(*claims); ok && tokenClaims.Valid {
  33. return c, nil
  34. }
  35. }
  36. return nil, err
  37. }