@@ -7,11 +7,12 @@ import (
77 "gin-vue-admin/model/request"
88 "gin-vue-admin/model/response"
99 "gin-vue-admin/service"
10+ "strconv"
11+ "time"
12+
1013 "github.com/dgrijalva/jwt-go"
1114 "github.com/gin-gonic/gin"
1215 "go.uber.org/zap"
13- "strconv"
14- "time"
1516)
1617
1718func JWTAuth () gin.HandlerFunc {
@@ -48,7 +49,7 @@ func JWTAuth() gin.HandlerFunc {
4849 }
4950 if claims .ExpiresAt - time .Now ().Unix () < claims .BufferTime {
5051 claims .ExpiresAt = time .Now ().Unix () + global .GVA_CONFIG .JWT .ExpiresTime
51- newToken , _ := j .CreateToken ( * claims )
52+ newToken , _ := j .CreateTokenByOldToken ( token , * claims )
5253 newClaims , _ := j .ParseToken (newToken )
5354 c .Header ("new-token" , newToken )
5455 c .Header ("new-expires-at" , strconv .FormatInt (newClaims .ExpiresAt , 10 ))
@@ -91,6 +92,14 @@ func (j *JWT) CreateToken(claims request.CustomClaims) (string, error) {
9192 return token .SignedString (j .SigningKey )
9293}
9394
95+ // CreateTokenByOldToken 旧token 换新token 使用归并回源避免并发问题
96+ func (j * JWT ) CreateTokenByOldToken (oldToken string , claims request.CustomClaims ) (string , error ) {
97+ v , err , _ := global .GVA_Concurrency_Control .Do ("JWT:" + oldToken , func () (interface {}, error ) {
98+ return j .CreateToken (claims )
99+ })
100+ return v .(string ), err
101+ }
102+
94103// 解析 token
95104func (j * JWT ) ParseToken (tokenString string ) (* request.CustomClaims , error ) {
96105 token , err := jwt .ParseWithClaims (tokenString , & request.CustomClaims {}, func (token * jwt.Token ) (i interface {}, e error ) {
0 commit comments