diff --git a/src/v1/handler/jwt_auth.go b/src/v1/handler/jwt_auth.go index 38bcd5e0db20b760159b68704d6097e61311f9df..d3ca39fdf21e52d4efdff8199df3b2bf03cd2a56 100644 --- a/src/v1/handler/jwt_auth.go +++ b/src/v1/handler/jwt_auth.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "github.com/dgrijalva/jwt-go" + "strings" ) type JwtTokenHandler struct { @@ -57,7 +58,10 @@ func (h *JwtTokenHandler) ParseToken(data interface{}, token string) error { return errors.New("token error") } - err = json.Unmarshal([]byte(dataStr), data, ) + //防止出现科学计数的数字 + decoder := json.NewDecoder(strings.NewReader(dataStr)) + decoder.UseNumber() + err = decoder.Decode(data) if err != nil { return errors.New("parse data fail:" + err.Error()) } diff --git a/src/v1/handler/jwt_auth_test.go b/src/v1/handler/jwt_auth_test.go new file mode 100644 index 0000000000000000000000000000000000000000..0f22845001e741172791a250438082640e60c460 --- /dev/null +++ b/src/v1/handler/jwt_auth_test.go @@ -0,0 +1,30 @@ +package handler + +import ( + "testing" + "time" +) + +func TestJwtTokenHandler_ParseToken(t *testing.T) { + handler := NewJwtTokenHandler("sashdjkhdfjkh12jkhk") + + data := map[string]interface{}{ + "a": 111, + "expire_at": time.Now().Unix(), + } + token, err := handler.GetToken(data) + if err != nil { + t.Errorf("get token err: %s", err) + return + } + + t.Logf("token: %s", token) + + var parseData = map[string]interface{}{} + err = handler.ParseToken(&parseData, token) + if err != nil { + t.Errorf("parse token err: %s", err) + return + } + t.Logf("parsed data: %+v,%d", data, data["expire_at"].(int64)) +}