Skip to content

Commit c313282

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

File tree

3 files changed

+63
-11
lines changed

3 files changed

+63
-11
lines changed

auth_jwt.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,16 @@ func (mw *GinJWTMiddleware) jwtFromQuery(c *gin.Context, key string) (string, er
305305
return token, nil
306306
}
307307

308+
func (mw *GinJWTMiddleware) jwtFromCookie(c *gin.Context, key string) (string, error) {
309+
cookie, _ := c.Cookie(key)
310+
311+
if cookie == "" {
312+
return "", errors.New("Cookie token empty")
313+
}
314+
315+
return cookie, nil
316+
}
317+
308318
func (mw *GinJWTMiddleware) parseToken(c *gin.Context) (*jwt.Token, error) {
309319
var token string
310320
var err error
@@ -315,8 +325,8 @@ func (mw *GinJWTMiddleware) parseToken(c *gin.Context) (*jwt.Token, error) {
315325
token, err = mw.jwtFromHeader(c, parts[1])
316326
case "query":
317327
token, err = mw.jwtFromQuery(c, parts[1])
318-
// case "cookie":
319-
// token, err = jwtFromCookie(parts[1])
328+
case "cookie":
329+
token, err = mw.jwtFromCookie(c, parts[1])
320330
}
321331

322332
if err != nil {

auth_jwt_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -665,3 +665,44 @@ func TestTokenFromQueryString(t *testing.T) {
665665
assert.Equal(t, http.StatusOK, r.Code)
666666
})
667667
}
668+
669+
func TestTokenFromCookieString(t *testing.T) {
670+
// the middleware to test
671+
authMiddleware := &GinJWTMiddleware{
672+
Realm: "test zone",
673+
Key: key,
674+
Timeout: time.Hour,
675+
Authenticator: func(userId string, password string, c *gin.Context) (string, bool) {
676+
if userId == "admin" && password == "admin" {
677+
return userId, true
678+
}
679+
return userId, false
680+
},
681+
Unauthorized: func(c *gin.Context, code int, message string) {
682+
c.String(code, message)
683+
},
684+
TokenLookup: "cookie:token",
685+
}
686+
687+
handler := ginHandler(authMiddleware)
688+
689+
r := gofight.New()
690+
691+
userToken := authMiddleware.TokenGenerator("admin")
692+
693+
r.GET("/auth/refresh_token").
694+
SetHeader(gofight.H{
695+
"Authorization": "Bearer " + userToken,
696+
}).
697+
Run(handler, func(r gofight.HTTPResponse, rq gofight.HTTPRequest) {
698+
assert.Equal(t, http.StatusUnauthorized, r.Code)
699+
})
700+
701+
r.GET("/auth/refresh_token").
702+
SetCookie(gofight.H{
703+
"token": userToken,
704+
}).
705+
Run(handler, func(r gofight.HTTPResponse, rq gofight.HTTPRequest) {
706+
assert.Equal(t, http.StatusOK, r.Code)
707+
})
708+
}

glide.lock

+10-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)