ljw 1 год назад
Родитель
Сommit
07450416ed
3 измененных файлов с 24 добавлено и 8 удалено
  1. 3 1
      http/middleware/admin.go
  2. 4 1
      http/middleware/rustauth.go
  3. 17 6
      service/user.go

+ 3 - 1
http/middleware/admin.go

@@ -17,7 +17,7 @@ func AdminAuth() gin.HandlerFunc {
17
 			c.Abort()
17
 			c.Abort()
18
 			return
18
 			return
19
 		}
19
 		}
20
-		user := service.AllService.UserService.InfoByAccessToken(token)
20
+		user, ut := service.AllService.UserService.InfoByAccessToken(token)
21
 		if user.Id == 0 {
21
 		if user.Id == 0 {
22
 			response.Fail(c, 403, "请先登录")
22
 			response.Fail(c, 403, "请先登录")
23
 			c.Abort()
23
 			c.Abort()
@@ -26,6 +26,8 @@ func AdminAuth() gin.HandlerFunc {
26
 
26
 
27
 		c.Set("curUser", user)
27
 		c.Set("curUser", user)
28
 		c.Set("token", token)
28
 		c.Set("token", token)
29
+		//如果时间小于1天,token自动续期
30
+		service.AllService.UserService.AutoRefreshAccessToken(ut)
29
 
31
 
30
 		c.Next()
32
 		c.Next()
31
 	}
33
 	}

+ 4 - 1
http/middleware/rustauth.go

@@ -28,7 +28,7 @@ func RustAuth() gin.HandlerFunc {
28
 		//这里只是简单的提取
28
 		//这里只是简单的提取
29
 		token = token[7:]
29
 		token = token[7:]
30
 		//验证token
30
 		//验证token
31
-		user := service.AllService.UserService.InfoByAccessToken(token)
31
+		user, ut := service.AllService.UserService.InfoByAccessToken(token)
32
 		if user.Id == 0 {
32
 		if user.Id == 0 {
33
 			c.JSON(401, gin.H{
33
 			c.JSON(401, gin.H{
34
 				"error": "Unauthorized",
34
 				"error": "Unauthorized",
@@ -46,6 +46,9 @@ func RustAuth() gin.HandlerFunc {
46
 
46
 
47
 		c.Set("curUser", user)
47
 		c.Set("curUser", user)
48
 		c.Set("token", token)
48
 		c.Set("token", token)
49
+
50
+		service.AllService.UserService.AutoRefreshAccessToken(ut)
51
+
49
 		c.Next()
52
 		c.Next()
50
 	}
53
 	}
51
 }
54
 }

+ 17 - 6
service/user.go

@@ -53,18 +53,18 @@ func (us *UserService) InfoByUsernamePassword(username, password string) *model.
53
 }
53
 }
54
 
54
 
55
 // InfoByAccesstoken 根据accesstoken取用户信息
55
 // InfoByAccesstoken 根据accesstoken取用户信息
56
-func (us *UserService) InfoByAccessToken(token string) *model.User {
56
+func (us *UserService) InfoByAccessToken(token string) (*model.User, *model.UserToken) {
57
 	u := &model.User{}
57
 	u := &model.User{}
58
 	ut := &model.UserToken{}
58
 	ut := &model.UserToken{}
59
 	global.DB.Where("token = ?", token).First(ut)
59
 	global.DB.Where("token = ?", token).First(ut)
60
 	if ut.Id == 0 {
60
 	if ut.Id == 0 {
61
-		return u
61
+		return u, ut
62
 	}
62
 	}
63
 	if ut.ExpiredAt < time.Now().Unix() {
63
 	if ut.ExpiredAt < time.Now().Unix() {
64
-		return u
64
+		return u, ut
65
 	}
65
 	}
66
 	global.DB.Where("id = ?", ut.UserId).First(u)
66
 	global.DB.Where("id = ?", ut.UserId).First(u)
67
-	return u
67
+	return u, ut
68
 }
68
 }
69
 
69
 
70
 // GenerateToken 生成token
70
 // GenerateToken 生成token
@@ -217,8 +217,9 @@ func (us *UserService) Delete(u *model.User) error {
217
 	}
217
 	}
218
 	tx.Commit()
218
 	tx.Commit()
219
 	// 删除关联的peer
219
 	// 删除关联的peer
220
-	return AllService.PeerService.EraseUserId(u.Id); err != nil {
221
-		return errors.New("User deleted successfully, but failed to unlink peer.")
220
+	if err := AllService.PeerService.EraseUserId(u.Id); err != nil {
221
+		global.Logger.Warn("User deleted successfully, but failed to unlink peer.")
222
+		return nil
222
 	}
223
 	}
223
 	return nil
224
 	return nil
224
 }
225
 }
@@ -447,3 +448,13 @@ func (us *UserService) getAdminUserCount() int64 {
447
 	global.DB.Model(&model.User{}).Where("is_admin = ?", true).Count(&count)
448
 	global.DB.Model(&model.User{}).Where("is_admin = ?", true).Count(&count)
448
 	return count
449
 	return count
449
 }
450
 }
451
+
452
+func (us *UserService) RefreshAccessToken(ut *model.UserToken) {
453
+	ut.ExpiredAt = time.Now().Add(time.Hour * 24 * 7).Unix()
454
+	global.DB.Model(ut).Update("expired_at", ut.ExpiredAt)
455
+}
456
+func (us *UserService) AutoRefreshAccessToken(ut *model.UserToken) {
457
+	if ut.ExpiredAt-time.Now().Unix() < 86400 {
458
+		us.RefreshAccessToken(ut)
459
+	}
460
+}