浏览代码

no message

panghu 7 月之前
父节点
当前提交
6a7b40e5ce
共有 1 个文件被更改,包括 41 次插入 和 10 次删除
  1. 41 10
      middleware/api.go

+ 41 - 10
middleware/api.go

@@ -16,16 +16,52 @@ var whiteList = []string{
 
 func ApiMiddleware() gin.HandlerFunc {
 	return func(c *gin.Context) {
-		// 检查当前路径是否在白名单中
-		if isPathInWhiteList(c.Request.URL.Path) {
-			c.Next()
-			return
-		}
 		// 从Header或Query中获取token
 		token := c.GetHeader("Authorization")
 		if token == "" {
 			token = c.Query("token")
 		}
+
+		// 定义member结构信息
+		var member *model.XMember
+		var err error
+		//获取redis
+		redisServer := server.GetRedisServerInstance()
+		// 检查当前路径是否在白名单中
+		if isPathInWhiteList(c.Request.URL.Path) {
+			if len(token) > 0 {
+				data := redisServer.GetStr(token)
+				if len(data) == 0 { //没用缓存信息
+					//根据token获取用户信息
+					memberModel := model.XMember{}
+					member, err = memberModel.GetMemberByToken(token)
+					if err != nil {
+						c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
+							"code":    401,
+							"message": "认证信息已过期",
+							"data":    nil,
+						})
+					}
+					if member.ID <= 0 {
+						c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
+							"code":    401,
+							"message": "token失效",
+							"data":    nil,
+						})
+					}
+					//存入缓存
+					jsonData, _ := json.Marshal(member)
+					redisServer.SetStr(token, string(jsonData), 120)
+				} else {
+					_ = json.Unmarshal([]byte(data), &member)
+
+				}
+				c.Set("mId", member.ID)
+			}
+			c.Next()
+			return
+		}
+
 		if token == "" {
 			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
 				"code":    404,
@@ -34,11 +70,6 @@ func ApiMiddleware() gin.HandlerFunc {
 			})
 			return
 		}
-		// 1. 尝试从Redis缓存获取用户信息
-		var member *model.XMember
-		var err error
-
-		redisServer := server.GetRedisServerInstance()
 		data := redisServer.GetStr(token)
 		if len(data) == 0 { //没用缓存信息
 			//根据token获取用户信息