package utility import ( "crypto/sha256" "encoding/hex" "time" "github.com/golang-jwt/jwt/v5" ) var jwtSecret = []byte("your_secret_key") // 建议放到配置文件 type Claims struct { UserID int64 `json:"user_id"` jwt.RegisteredClaims } // GenerateToken 生成 JWT Token func GenerateToken(userID int64) (string, error) { claims := Claims{ UserID: userID, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)), IssuedAt: jwt.NewNumericDate(time.Now()), }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString(jwtSecret) } // ParseToken 解析 JWT Token func ParseToken(tokenString string) (*Claims, error) { token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) { return jwtSecret, nil }) if err != nil { return nil, err } if claims, ok := token.Claims.(*Claims); ok && token.Valid { return claims, nil } return nil, err } // HashPassword 对密码+salt做sha256加密 func HashPassword(password, salt string) string { h := sha256.New() h.Write([]byte(password + salt)) return hex.EncodeToString(h.Sum(nil)) }