package xjwt import ( "fmt" "github.com/golang-jwt/jwt/v5" "mylomen_server/common/dto" "testing" "time" ) func TestGenAndParse(t *testing.T) { mySigningKey := []byte("AllYourBase") claims := dto.LoginTokenVo{ Sn: "mySn", Token: "myToken", RegisteredClaims: jwt.RegisteredClaims{ Audience: []string{"mylomen.com"}, ExpiresAt: jwt.NewNumericDate(time.Now().Add(1 * time.Hour)), IssuedAt: jwt.NewNumericDate(time.Now()), Issuer: "mylomen.com", NotBefore: jwt.NewNumericDate(time.Now()), Subject: "1", }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) ss, err := token.SignedString(mySigningKey) fmt.Println(ss, err) parseToken, err := jwt.ParseWithClaims(ss, &dto.LoginTokenVo{}, func(token *jwt.Token) (interface{}, error) { return mySigningKey, nil }) if userClaims, ok := parseToken.Claims.(*dto.LoginTokenVo); ok && parseToken.Valid { t.Log(userClaims, userClaims.RegisteredClaims.Issuer) } else { fmt.Println(err) t.Error("验证失败") } } func TestHs256(t *testing.T) { type User struct { Id int64 Name string } type UserClaims struct { User User jwt.RegisteredClaims } // 1 jwt.NewWithClaims生成token user := User{ Id: 101, Name: "hisheng", } userClaims := UserClaims{ User: user, RegisteredClaims: jwt.RegisteredClaims{}, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, userClaims) // 2 把token加密 mySigningKey := []byte("ushjlwmwnwht") ss, err := token.SignedString(mySigningKey) t.Log(ss, err) } func TestHs256Parse(t *testing.T) { tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VyIjp7IklkIjoxMDEsIk5hbWUiOiJoaXNoZW5nIn19.ij1kWID03f_CiELe0fPLZJ-Y64dkf2nDE-f6nGERBSE" type User struct { Id int64 Name string } type UserClaims struct { User User jwt.RegisteredClaims } token, err := jwt.ParseWithClaims(tokenString, &UserClaims{}, func(token *jwt.Token) (interface{}, error) { return []byte("ushjlwmwnwht"), nil }) if userClaims, ok := token.Claims.(*UserClaims); ok && token.Valid { t.Log(userClaims, userClaims.RegisteredClaims.Issuer) } else { t.Log(err) } } func TestGenJwtTokenThenParse(t *testing.T) { claims := dto.LoginTokenVo{} claims.Sn = "mySn" claims.Token = "myToken" claims.RegisteredClaims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(24 * time.Hour)) jwtToken := GenJwtToken(claims) //parse data, err := ParseJwtToken(jwtToken) if err != nil { t.Error(err) return } if data.Sn != claims.Sn { t.Error("Sn 不一致") } }