package common import ( "crypto/md5" "encoding/hex" "fmt" "time" ) import ( "github.com/golang-jwt/jwt/v5" "github.com/spf13/cast" ) var CstSh, _ = time.LoadLocation("Asia/Shanghai") const ( LocateDateFormat = "2006-01-02" LocateTimeFormat = "2006-01-02 15:04:05" LocateMilliFormat = "2006-01-02 15:04:05.9999" ) func Date() string { return time.Now().In(CstSh).Format(LocateDateFormat) } func Now() string { return time.Now().In(CstSh).Format(LocateTimeFormat) } func NowMilli() string { return time.Now().In(CstSh).Format(LocateMilliFormat) } func NewToken(userId uint, name string) (string, int64, error) { expire := time.Now().AddDate(0, 1, 0) hmacSampleSecret := []byte(BasicConfig.Jwt) token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "id": userId, "name": name, "exp": expire.Unix(), }) str, err := token.SignedString(hmacSampleSecret) return str, expire.Unix(), err } func ParseToken(tokenString string) (uint, string, error) { token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } return []byte(BasicConfig.Jwt), nil }) if err != nil { return 0, "", err } claims := token.Claims.(jwt.MapClaims) return cast.ToUint(claims["id"]), claims["name"].(string), nil } func MD5(v []byte) string { h := md5.New() h.Write(v) re := h.Sum(nil) return hex.EncodeToString(re) }