package mw import ( "applet/app/comm/db" "applet/app/comm/e" "applet/app/comm/utils" "applet/app/comm/utils/cache" "applet/app/lib/auth" "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement" "errors" "fmt" "strings" "github.com/gin-gonic/gin" ) // AuthJWT is jwt middleware func StoreAuthJWT(c *gin.Context) { requestType := c.Request.Header.Get("Request-Type") requestUid := c.Request.Header.Get("Request-uid") var mc = new(auth.JWTUser) var err error var parts = make([]string, 2) if requestType != "mq_consume" { authHeader := c.Request.Header.Get("Authorization") fmt.Println("test================,", authHeader) if authHeader == "" { e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 不能为空")) return } // 按空格分割 parts = strings.SplitN(authHeader, " ", 2) fmt.Println("test1================,", parts) if !(len(parts) == 2 && parts[0] == "Bearer") { e.OutErr(c, e.ERR_TOKEN_FORMAT, errors.New("token 格式不对")) return } // parts[1]是token mc, err = utils.ParseStoreToken(parts[1]) fmt.Println("test3================,", mc) if err != nil { e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效")) return } } else { mc.UID = utils.StrToInt(requestUid) } //fmt.Println(mc.UID) // 获取user NewCampTaskStoreUserDb := implement.NewCampTaskStoreUserDb(db.DBs[c.GetString("mid")]) u, err := NewCampTaskStoreUserDb.GetCampTaskStoreUser(mc.UID) if err != nil { e.OutErr(c, e.ERR_DB_ORM, err) return } if u == nil { e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效")) return } if requestType != "mq_consume" { // 校验是否和缓存的token一致,只能有一个token 是真实有效 key := fmt.Sprintf("%s:camp_token:%s", c.GetString("mid"), u.Phone) //fmt.Println(key) cjwt, err := cache.GetString(key) if err != nil { c.Abort() e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired")) return } if parts[1] != cjwt { c.Abort() e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired")) return } } // 将当前请求的username信息保存到请求的上下文c上 c.Set("camp_store", u) // 异步处理 有效会员和新会员 c.Next() // 后续的处理函数可以用过c.Get("user")来获取当前请求的用户信息 }