Skip to content

Commit 557d3b3

Browse files
committed
Get token from query String.
Signed-off-by: Bo-Yi Wu <[email protected]>
1 parent 8841014 commit 557d3b3

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

auth_jwt.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ func (mw *GinJWTMiddleware) TokenGenerator(userID string) string {
281281
}
282282

283283
func (mw *GinJWTMiddleware) jwtFromHeader(c *gin.Context, key string) (string, error) {
284-
authHeader := c.Request.Header.Get("Authorization")
284+
authHeader := c.Request.Header.Get(key)
285285

286286
if authHeader == "" {
287287
return "", errors.New("auth header empty")
@@ -295,6 +295,16 @@ func (mw *GinJWTMiddleware) jwtFromHeader(c *gin.Context, key string) (string, e
295295
return parts[1], nil
296296
}
297297

298+
func (mw *GinJWTMiddleware) jwtFromQuery(c *gin.Context, key string) (string, error) {
299+
token := c.Query(key)
300+
301+
if token == "" {
302+
return "", errors.New("Query token empty")
303+
}
304+
305+
return token, nil
306+
}
307+
298308
func (mw *GinJWTMiddleware) parseToken(c *gin.Context) (*jwt.Token, error) {
299309
var token string
300310
var err error
@@ -303,8 +313,8 @@ func (mw *GinJWTMiddleware) parseToken(c *gin.Context) (*jwt.Token, error) {
303313
switch parts[0] {
304314
case "header":
305315
token, err = mw.jwtFromHeader(c, parts[1])
306-
// case "query":
307-
// token, err = jwtFromQuery(parts[1])
316+
case "query":
317+
token, err = mw.jwtFromQuery(c, parts[1])
308318
// case "cookie":
309319
// token, err = jwtFromCookie(parts[1])
310320
}

auth_jwt_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -624,3 +624,44 @@ func TestTokenExpire(t *testing.T) {
624624
assert.Equal(t, http.StatusUnauthorized, r.Code)
625625
})
626626
}
627+
628+
func TestTokenFromQueryString(t *testing.T) {
629+
// the middleware to test
630+
authMiddleware := &GinJWTMiddleware{
631+
Realm: "test zone",
632+
Key: key,
633+
Timeout: time.Hour,
634+
Authenticator: func(userId string, password string, c *gin.Context) (string, bool) {
635+
if userId == "admin" && password == "admin" {
636+
return userId, true
637+
}
638+
return userId, false
639+
},
640+
Unauthorized: func(c *gin.Context, code int, message string) {
641+
c.String(code, message)
642+
},
643+
TokenLookup: "query:token",
644+
}
645+
646+
handler := ginHandler(authMiddleware)
647+
648+
r := gofight.New()
649+
650+
userToken := authMiddleware.TokenGenerator("admin")
651+
652+
r.GET("/auth/refresh_token").
653+
SetHeader(gofight.H{
654+
"Authorization": "Bearer " + userToken,
655+
}).
656+
Run(handler, func(r gofight.HTTPResponse, rq gofight.HTTPRequest) {
657+
assert.Equal(t, http.StatusUnauthorized, r.Code)
658+
})
659+
660+
r.GET("/auth/refresh_token?token="+userToken).
661+
SetHeader(gofight.H{
662+
"Authorization": "Bearer " + userToken,
663+
}).
664+
Run(handler, func(r gofight.HTTPResponse, rq gofight.HTTPRequest) {
665+
assert.Equal(t, http.StatusOK, r.Code)
666+
})
667+
}

0 commit comments

Comments
 (0)