@@ -39,6 +39,8 @@ type GinJWTMiddleware struct {
39
39
40
40
// Duration that a jwt token is valid. Optional, defaults to one hour.
41
41
Timeout time.Duration
42
+ // Callback function that will override the default timeout duration.
43
+ TimeoutFunc func (data interface {}) time.Duration
42
44
43
45
// This field allows clients to refresh their token until MaxRefresh has passed.
44
46
// Note that clients can refresh their token in the last moment of MaxRefresh.
@@ -313,6 +315,12 @@ func (mw *GinJWTMiddleware) MiddlewareInit() error {
313
315
mw .Timeout = time .Hour
314
316
}
315
317
318
+ if mw .TimeoutFunc == nil {
319
+ mw .TimeoutFunc = func (data interface {}) time.Duration {
320
+ return mw .Timeout
321
+ }
322
+ }
323
+
316
324
if mw .TimeFunc == nil {
317
325
mw .TimeFunc = time .Now
318
326
}
@@ -508,7 +516,7 @@ func (mw *GinJWTMiddleware) LoginHandler(c *gin.Context) {
508
516
}
509
517
}
510
518
511
- expire := mw .TimeFunc ().Add (mw .Timeout )
519
+ expire := mw .TimeFunc ().Add (mw .TimeoutFunc ( claims ) )
512
520
claims ["exp" ] = expire .Unix ()
513
521
claims ["orig_iat" ] = mw .TimeFunc ().Unix ()
514
522
tokenString , err := mw .signedString (token )
@@ -583,7 +591,7 @@ func (mw *GinJWTMiddleware) RefreshToken(c *gin.Context) (string, time.Time, err
583
591
newClaims [key ] = claims [key ]
584
592
}
585
593
586
- expire := mw .TimeFunc ().Add (mw .Timeout )
594
+ expire := mw .TimeFunc ().Add (mw .TimeoutFunc ( claims ) )
587
595
newClaims ["exp" ] = expire .Unix ()
588
596
newClaims ["orig_iat" ] = mw .TimeFunc ().Unix ()
589
597
tokenString , err := mw .signedString (newToken )
@@ -633,7 +641,7 @@ func (mw *GinJWTMiddleware) TokenGenerator(data interface{}) (string, time.Time,
633
641
}
634
642
}
635
643
636
- expire := mw .TimeFunc ().Add (mw .Timeout )
644
+ expire := mw .TimeFunc ().Add (mw .TimeoutFunc ( claims ) )
637
645
claims ["exp" ] = expire .Unix ()
638
646
claims ["orig_iat" ] = mw .TimeFunc ().Unix ()
639
647
tokenString , err := mw .signedString (token )
0 commit comments