Skip to content

Commit 785d5ef

Browse files
committed
Support jwt-go v3.
Signed-off-by: Bo-Yi Wu <[email protected]>
1 parent 8c9aa27 commit 785d5ef

File tree

2 files changed

+36
-27
lines changed

2 files changed

+36
-27
lines changed

auth_jwt.go

+26-20
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package jwt
33
import (
44
"errors"
55
"github.com/gin-gonic/gin"
6-
"gopkg.in/dgrijalva/jwt-go.v2"
6+
"gopkg.in/dgrijalva/jwt-go.v3"
77
"log"
88
"net/http"
99
"strings"
@@ -123,8 +123,10 @@ func (mw *GinJWTMiddleware) middlewareImpl(c *gin.Context) {
123123
return
124124
}
125125

126-
id := token.Claims["id"].(string)
127-
c.Set("JWT_PAYLOAD", token.Claims)
126+
claims := token.Claims.(jwt.MapClaims)
127+
128+
id := claims["id"].(string)
129+
c.Set("JWT_PAYLOAD", claims)
128130
c.Set("userID", id)
129131

130132
if !mw.Authorizator(id, c) {
@@ -159,10 +161,11 @@ func (mw *GinJWTMiddleware) LoginHandler(c *gin.Context) {
159161

160162
// Create the token
161163
token := jwt.New(jwt.GetSigningMethod(mw.SigningAlgorithm))
164+
claims := token.Claims.(jwt.MapClaims)
162165

163166
if mw.PayloadFunc != nil {
164167
for key, value := range mw.PayloadFunc(loginVals.Username) {
165-
token.Claims[key] = value
168+
claims[key] = value
166169
}
167170
}
168171

@@ -171,9 +174,9 @@ func (mw *GinJWTMiddleware) LoginHandler(c *gin.Context) {
171174
}
172175

173176
expire := time.Now().Add(mw.Timeout)
174-
token.Claims["id"] = userId
175-
token.Claims["exp"] = expire.Unix()
176-
token.Claims["orig_iat"] = time.Now().Unix()
177+
claims["id"] = userId
178+
claims["exp"] = expire.Unix()
179+
claims["orig_iat"] = time.Now().Unix()
177180

178181
tokenString, err := token.SignedString(mw.Key)
179182

@@ -193,8 +196,9 @@ func (mw *GinJWTMiddleware) LoginHandler(c *gin.Context) {
193196
// Reply will be of the form {"token": "TOKEN"}.
194197
func (mw *GinJWTMiddleware) RefreshHandler(c *gin.Context) {
195198
token, _ := mw.parseToken(c)
199+
claims := token.Claims.(jwt.MapClaims)
196200

197-
origIat := int64(token.Claims["orig_iat"].(float64))
201+
origIat := int64(claims["orig_iat"].(float64))
198202

199203
if origIat < time.Now().Add(-mw.MaxRefresh).Unix() {
200204
mw.unauthorized(c, http.StatusUnauthorized, "Token is expired.")
@@ -203,15 +207,16 @@ func (mw *GinJWTMiddleware) RefreshHandler(c *gin.Context) {
203207

204208
// Create the token
205209
newToken := jwt.New(jwt.GetSigningMethod(mw.SigningAlgorithm))
210+
newClaims := newToken.Claims.(jwt.MapClaims)
206211

207-
for key := range token.Claims {
208-
newToken.Claims[key] = token.Claims[key]
212+
for key := range claims {
213+
newClaims[key] = claims[key]
209214
}
210215

211216
expire := time.Now().Add(mw.Timeout)
212-
newToken.Claims["id"] = token.Claims["id"]
213-
newToken.Claims["exp"] = expire.Unix()
214-
newToken.Claims["orig_iat"] = origIat
217+
newClaims["id"] = claims["id"]
218+
newClaims["exp"] = expire.Unix()
219+
newClaims["orig_iat"] = origIat
215220

216221
tokenString, err := newToken.SignedString(mw.Key)
217222

@@ -227,31 +232,32 @@ func (mw *GinJWTMiddleware) RefreshHandler(c *gin.Context) {
227232
}
228233

229234
// ExtractClaims help to extract the JWT claims
230-
func ExtractClaims(c *gin.Context) map[string]interface{} {
235+
func ExtractClaims(c *gin.Context) jwt.MapClaims {
231236

232237
if _, exists := c.Get("JWT_PAYLOAD"); !exists {
233-
emptyClaims := make(map[string]interface{})
238+
emptyClaims := make(jwt.MapClaims)
234239
return emptyClaims
235240
}
236241

237242
jwtClaims, _ := c.Get("JWT_PAYLOAD")
238243

239-
return jwtClaims.(map[string]interface{})
244+
return jwtClaims.(jwt.MapClaims)
240245
}
241246

242247
// TokenGenerator handler that clients can use to get a jwt token.
243248
func (mw *GinJWTMiddleware) TokenGenerator(userID string) string {
244249
token := jwt.New(jwt.GetSigningMethod(mw.SigningAlgorithm))
250+
claims := token.Claims.(jwt.MapClaims)
245251

246252
if mw.PayloadFunc != nil {
247253
for key, value := range mw.PayloadFunc(userID) {
248-
token.Claims[key] = value
254+
claims[key] = value
249255
}
250256
}
251257

252-
token.Claims["id"] = userID
253-
token.Claims["exp"] = time.Now().Add(mw.Timeout).Unix()
254-
token.Claims["orig_iat"] = time.Now().Unix()
258+
claims["id"] = userID
259+
claims["exp"] = time.Now().Add(mw.Timeout).Unix()
260+
claims["orig_iat"] = time.Now().Unix()
255261

256262
tokenString, _ := token.SignedString(mw.Key)
257263

auth_jwt_test.go

+10-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"github.com/buger/jsonparser"
66
"github.com/gin-gonic/gin"
77
"github.com/stretchr/testify/assert"
8-
"gopkg.in/dgrijalva/jwt-go.v2"
8+
"gopkg.in/dgrijalva/jwt-go.v3"
99
"net/http"
1010
"net/http/httptest"
1111
"testing"
@@ -23,10 +23,12 @@ func makeTokenString(SigningAlgorithm string, username string) string {
2323
}
2424

2525
token := jwt.New(jwt.GetSigningMethod(SigningAlgorithm))
26-
token.Claims["id"] = username
27-
token.Claims["exp"] = time.Now().Add(time.Hour).Unix()
28-
token.Claims["orig_iat"] = time.Now().Unix()
26+
claims := token.Claims.(jwt.MapClaims)
27+
claims["id"] = username
28+
claims["exp"] = time.Now().Add(time.Hour).Unix()
29+
claims["orig_iat"] = time.Now().Unix()
2930
tokenString, _ := token.SignedString(key)
31+
3032
return tokenString
3133
}
3234

@@ -322,9 +324,10 @@ func TestExpriedTokenOnRefreshHandler(t *testing.T) {
322324
r := gofight.New()
323325

324326
token := jwt.New(jwt.GetSigningMethod("HS256"))
325-
token.Claims["id"] = "admin"
326-
token.Claims["exp"] = time.Now().Add(time.Hour).Unix()
327-
token.Claims["orig_iat"] = 0
327+
claims := token.Claims.(jwt.MapClaims)
328+
claims["id"] = "admin"
329+
claims["exp"] = time.Now().Add(time.Hour).Unix()
330+
claims["orig_iat"] = 0
328331
tokenString, _ := token.SignedString(key)
329332

330333
r.GET("/auth/refresh_token").

0 commit comments

Comments
 (0)