package middleware import ( "base-framework/pkg/config" "base-framework/pkg/reponse" "base-framework/pkg/router" "base-framework/pkg/utils/jwt" "errors" "strings" ) func Auth() router.HandlerFunc { return func(c *router.Context) { tokenHeader := c.Header("Authorization") userIdHeader := c.Header("userId") orgIDHeader := c.Header("orgId") // 缺少登录信息 if tokenHeader == "" || userIdHeader == "" || orgIDHeader == "" { reponse.Error(c).Code(reponse.CodeNoLogin).Send() c.Abort() return } // Bearer token 格式校验 parts := strings.Fields(tokenHeader) if len(parts) != 2 || strings.ToLower(parts[0]) != "bearer" { reponse.Error(c).Code(reponse.CodeInvalidToken).Send() c.Abort() return } // 解析 token tokenStr := parts[1] claims, err := jwt.VerifyToken(tokenStr) if err != nil { switch { case errors.Is(err, jwt.ErrTokenExpired): reponse.Error(c).Code(reponse.CodeLoginExpired).Send() default: reponse.Error(c).Code(reponse.CodeInvalidToken).Send() } c.Abort() return } // user_id 校验 if claims.UserID != userIdHeader { reponse.Error(c).Code(reponse.CodeInvalidToken).Send() c.Abort() return } // org_id 校验 if claims.OrgID != orgIDHeader { reponse.Error(c).Code(reponse.CodeInvalidToken).Send() c.Abort() return } // 检查是否有该机构号 hasOrg := false for k := range config.GetDBConfigs() { if k == orgIDHeader { hasOrg = true break } } if !hasOrg { reponse.Error(c).Code(reponse.CodeInvalidOrgCode).Send() return } c.Set("orgId", orgIDHeader) c.Next() } }