diff --git a/auth_jwt.go b/auth_jwt.go index 39b163b..0f7f3eb 100644 --- a/auth_jwt.go +++ b/auth_jwt.go @@ -693,6 +693,20 @@ func ExtractClaims(c *gin.Context) MapClaims { return claims.(MapClaims) } +// ExtractClaimsFromToken help to extract the JWT claims from token +func ExtractClaimsFromToken(token *jwt.Token) MapClaims { + if token == nil { + return make(MapClaims) + } + + claims := MapClaims{} + for key, value := range token.Claims.(jwt.MapClaims) { + claims[key] = value + } + + return claims +} + // GetToken help to get the JWT token string func GetToken(c *gin.Context) string { token, exists := c.Get("JWT_TOKEN") diff --git a/auth_jwt_test.go b/auth_jwt_test.go index e4de976..023e92f 100644 --- a/auth_jwt_test.go +++ b/auth_jwt_test.go @@ -1151,6 +1151,13 @@ func TestCheckTokenString(t *testing.T) { Unauthorized: func(c *gin.Context, code int, message string) { c.String(code, message) }, + PayloadFunc: func(data interface{}) MapClaims { + if v, ok := data.(MapClaims); ok { + return v + } + + return nil + }, }) handler := ginHandler(authMiddleware) @@ -1169,6 +1176,11 @@ func TestCheckTokenString(t *testing.T) { assert.Equal(t, http.StatusOK, r.Code) }) + token, err := authMiddleware.ParseTokenString(userToken) + assert.NoError(t, err) + claims := ExtractClaimsFromToken(token) + assert.Equal(t, "admin", claims["identity"]) + time.Sleep(2 * time.Second) r.GET("/auth/hello"). @@ -1179,6 +1191,7 @@ func TestCheckTokenString(t *testing.T) { assert.Equal(t, http.StatusUnauthorized, r.Code) }) - _, err := authMiddleware.ParseTokenString(userToken) + _, err = authMiddleware.ParseTokenString(userToken) assert.Error(t, err) + assert.Equal(t, MapClaims{}, ExtractClaimsFromToken(nil)) }