jwt.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package service
  2. import (
  3. "time"
  4. "github.com/golang-jwt/jwt/v4"
  5. "newaterobot-process/config"
  6. )
  7. // CustomClaims 自定义声明结构体
  8. type CustomClaims struct {
  9. UserID uint `json:"user_id"`
  10. Username string `json:"username"`
  11. jwt.RegisteredClaims
  12. }
  13. // JWTService JWT服务
  14. type JWTService struct{}
  15. var jwtService = new(JWTService)
  16. // GenerateToken 生成token
  17. func (j *JWTService) GenerateToken(userID uint, username string) (string, error) {
  18. // 获取JWT配置
  19. jwtConfig := config.GlobalConfig.JWT
  20. // 创建声明
  21. claims := CustomClaims{
  22. userID,
  23. username,
  24. jwt.RegisteredClaims{
  25. ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Duration(jwtConfig.Expire) * time.Second)),
  26. IssuedAt: jwt.NewNumericDate(time.Now()),
  27. NotBefore: jwt.NewNumericDate(time.Now()),
  28. },
  29. }
  30. // 创建token
  31. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
  32. // 签名token
  33. return token.SignedString([]byte(jwtConfig.Secret))
  34. }
  35. // ParseToken 解析token
  36. func (j *JWTService) ParseToken(tokenString string) (*CustomClaims, error) {
  37. // 获取JWT配置
  38. jwtConfig := config.GlobalConfig.JWT
  39. // 解析token
  40. token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
  41. return []byte(jwtConfig.Secret), nil
  42. })
  43. if err != nil {
  44. return nil, err
  45. }
  46. if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {
  47. return claims, nil
  48. }
  49. return nil, err
  50. }
  51. // GetJWTService 获取JWT服务实例
  52. func GetJWTService() *JWTService {
  53. return jwtService
  54. }