Skip to content

Commit cb31120

Browse files
authored
Merge pull request #34 from appleboy/v2
Support jwt-go v3.
2 parents 8c9aa27 + b9dba0d commit cb31120

File tree

3 files changed

+54
-29
lines changed

3 files changed

+54
-29
lines changed

README.md

+18-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,23 @@ It uses [jwt-go](https://github.com/dgrijalva/jwt-go) to provide a jwt authentic
88

99
## Install
1010

11-
Install gin-gwt [v1](http://gopkg.in/appleboy/gin-jwt.v1) version if `jwt-go` using [v2](http://gopkg.in/dgrijalva/jwt-go.v2) version. To get the package, execute:
11+
### v2 version
12+
13+
Install gin-gwt [v2](http://gopkg.in/appleboy/gin-jwt.v2) version for `jwt-go` [v3](http://gopkg.in/dgrijalva/jwt-go.v3) version. To get the package, execute:
14+
15+
```bash
16+
$ go get gopkg.in/appleboy/gin-jwt.v2
17+
```
18+
19+
To import this package, add the following line to your code:
20+
21+
```go
22+
import "gopkg.in/appleboy/gin-jwt.v2"
23+
```
24+
25+
### v1 version
26+
27+
Install gin-gwt [v1](http://gopkg.in/appleboy/gin-jwt.v1) version for `jwt-go` [v2](http://gopkg.in/dgrijalva/jwt-go.v2) version. To get the package, execute:
1228

1329
```bash
1430
$ go get gopkg.in/appleboy/gin-jwt.v1
@@ -28,7 +44,7 @@ Please see [server example file](example/server.go).
2844
package main
2945

3046
import (
31-
"gopkg.in/appleboy/gin-jwt.v1"
47+
"gopkg.in/appleboy/gin-jwt.v2"
3248
"github.com/fvbock/endless"
3349
"github.com/gin-gonic/gin"
3450
"os"

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)