package token import ( "errors" "fmt" "mtp2_if/global/e" "mtp2_if/rediscli" "net/http" "strings" "github.com/gin-gonic/gin" ) // CheckToken Token校验 func CheckToken(loginid string, token string) error { key := fmt.Sprintf("monitor:online_loginid::%s", loginid) field := "Token" realToken, err := rediscli.GetRedisClient().HGet(key, field).Result() if err != nil { return err } if realToken != token { return errors.New("token is invalid") } return nil } // Auth Token校验中间件 func Auth() gin.HandlerFunc { return func(c *gin.Context) { var code int var data interface{} code = e.SUCCESS token := c.GetHeader("Authorization") if token == "" { // Token缺失 code = e.ERROR_AUTH_CHECK_TOKEN_MISSING } else { // 获取loginid s := strings.Split(token, "_") loginid := s[0] if err := CheckToken(loginid, token); err != nil { // Token错误 code = e.ERROR_AUTH_CHECK_TOKEN_FAIL } } // Token检验失败 if code != e.SUCCESS { c.JSON(http.StatusUnauthorized, gin.H{ "code": code, "msg": e.GetMsg(code), "data": data, }) c.Abort() return } // Token检验成功 c.Next() } }