package middleware import ( "go-nc/configs/global" routes "go-nc/internal/router" "go-nc/internal/utils" "go-nc/model" "github.com/gin-gonic/gin" ) var TokenExpired = 886 // JwtAuth 中间件 func JwtAuth() gin.HandlerFunc { return func(c *gin.Context) { // 白名单 if utils.Contains(routes.NoAuthApi, c.Request.URL.Path) { c.Next() return } // 获取token auth := c.Request.Header.Get("Authorization") if len(auth) == 0 { // 无token直接拒绝 c.Abort() ErrorResponse(c, TokenExpired, "token无效") return } // 校验token claims, err := utils.ParseToken(auth) if err != nil { // if strings.Contains(err.Error(), "expired") { // // 若过期,调用续签函数 // newToken, _ := utils.RenewToken(claims) // if newToken != "" { // // 续签成功給返回头设置一个newtoken字段 // c.Header("newtoken", newToken) // c.Request.Header.Set("Authorization", newToken) // c.Next() // return // } // } // Token验证失败或续签失败直接拒绝请求 c.Abort() ErrorResponse(c, TokenExpired, "token无效!") return } // 查询数据库,验证用户信息 var userInfo model.Sys_user global.App.DB.Where("id= ? AND username = ?", claims.User.Id, claims.User.UserName).First(&userInfo) userInfo.Password = "" // 用户不存在 if userInfo.Id == 0 { // 用户不存在直接拒绝 c.Abort() // 终止请求 ErrorResponse(c, TokenExpired, "token无效!") return } // 状态不正常直接拒绝 if userInfo.State != "1" { c.Abort() // 终止请求 ErrorResponse(c, TokenExpired, "账号已被锁定,请联系管理员!") return } // 用户存在继续执行 c.Set("userInfo", userInfo) // token未过期继续执行1其他中间件 c.Next() } }