liuxiaolong
2020-06-05 7c811247ecf143e08c576986a884bedadc57dd66
middlewares/auth/jwt.go
@@ -50,6 +50,39 @@
   return authJwtToken.Valid
}
func (jwtAuth *jwtAuthManager) RefreshToken(tokenStr string) (bool,string,string) {
   tokenStr := strings.Replace(tokenStr, "Bearer ", "")
   if tokenStr != "" {
      jwtToken, err := jwtLib.Parse(tokenStr, func(token *jwtLib.Token) (interface{}, error) {
         b := []byte(jwtAuth.secret)
         return b, nil
      })
      if err == nil {
         if claims, ok := jwtToken.Claims.(jwtLib.MapClaims); ok && jwtToken.Valid {
            var user map[string]interface{}
            if err := json.Unmarshal([]byte(claims["user"].(string)), &user); err == nil {
               //生成一个新的token和refresh_token值
               userStr, _ := json.Marshal(user)
               jwtToken.Claims = jwtLib.MapClaims{
                  "user": string(userStr),
                  "exp":  time.Now().Add(jwtAuth.expire).Unix(),
               }
               token,e1 := jwtToken.SignedString([]byte(jwtAuth.secret))
               jwtToken.Claims = jwtLib.MapClaims{
                  "user": string(userStr),
                  "exp":  time.Now().Add(jwtAuth.expire + time.Hour * 4).Unix(),
               }
               refreshToken,e2 := jwtToken.SignedString([]byte(jwtAuth.secret))
               if e1 ==nil && e2 == nil {
                  return true, token, refreshToken
               }
            }
         }
      }
   }
   return false,"",""
}
func (jwtAuth *jwtAuthManager) User(c *gin.Context) map[string]interface{} {
   var jwtToken *jwtLib.Token
   if jwtUser, exist := c.Get("User"); !exist {
@@ -83,22 +116,25 @@
   }
}
func (jwtAuth *jwtAuthManager) Login(http *http.Request, w http.ResponseWriter, user map[string]interface{}) interface{} {
func (jwtAuth *jwtAuthManager) Login(http *http.Request, w http.ResponseWriter, user map[string]interface{}) (bool,string,string) {
   token := jwtLib.New(jwtLib.GetSigningMethod(jwtAuth.alg))
   jwtToken := jwtLib.New(jwtLib.GetSigningMethod(jwtAuth.alg))
   userStr, err := json.Marshal(user)
   token.Claims = jwtLib.MapClaims{
   userStr, _ := json.Marshal(user)
   jwtToken.Claims = jwtLib.MapClaims{
      "user": string(userStr),
      "exp":  time.Now().Add(jwtAuth.expire).Unix(),
   }
   tokenString, err := token.SignedString([]byte(jwtAuth.secret))
   if err != nil {
      return nil
   token,e1 := jwtToken.SignedString([]byte(jwtAuth.secret))
   jwtToken.Claims = jwtLib.MapClaims{
      "user": string(userStr),
      "exp":  time.Now().Add(jwtAuth.expire + time.Hour * 4).Unix(),
   }
   return tokenString
   refreshToken,e2 := jwtToken.SignedString([]byte(jwtAuth.secret))
   if e1 ==nil && e2 ==nil {
      return true, token, refreshToken
   }
   return false, "", ""
}
func (jwtAuth *jwtAuthManager) Logout(http *http.Request, w http.ResponseWriter) bool {