| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package service
- import (
- "time"
-
- "github.com/golang-jwt/jwt/v4"
-
- "newaterobot-process/config"
- )
- // CustomClaims 自定义声明结构体
- type CustomClaims struct {
- UserID uint `json:"user_id"`
- Username string `json:"username"`
- jwt.RegisteredClaims
- }
- // JWTService JWT服务
- type JWTService struct{}
- var jwtService = new(JWTService)
- // GenerateToken 生成token
- func (j *JWTService) GenerateToken(userID uint, username string) (string, error) {
- // 获取JWT配置
- jwtConfig := config.GlobalConfig.JWT
-
- // 创建声明
- claims := CustomClaims{
- userID,
- username,
- jwt.RegisteredClaims{
- ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Duration(jwtConfig.Expire) * time.Second)),
- IssuedAt: jwt.NewNumericDate(time.Now()),
- NotBefore: jwt.NewNumericDate(time.Now()),
- },
- }
- // 创建token
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
- // 签名token
- return token.SignedString([]byte(jwtConfig.Secret))
- }
- // ParseToken 解析token
- func (j *JWTService) ParseToken(tokenString string) (*CustomClaims, error) {
- // 获取JWT配置
- jwtConfig := config.GlobalConfig.JWT
-
- // 解析token
- token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
- return []byte(jwtConfig.Secret), nil
- })
- if err != nil {
- return nil, err
- }
- if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {
- return claims, nil
- }
- return nil, err
- }
- // GetJWTService 获取JWT服务实例
- func GetJWTService() *JWTService {
- return jwtService
- }
|