• yangjianbo's avatar
    fix: 代码的核心问题是判错条件用错了层级: · fd51ff69
    yangjianbo authored
      - apiKeyService.GetByKey(...) 返回的“找不到 API key”在这个项目里通常会被翻译成业务错误(比如
        service.ErrApiKeyNotFound 这类 ApplicationError),而不是直接把 gorm.ErrRecordNotFound 透传到中
        间件层。
      - 因此你在中间件里用 errors.Is(err, gorm.ErrRecordNotFound) 去判断“无效 key”,很容易匹配不到(尤其
        是:后面加 Redis 缓存、换存储实现、或测试里用 stub repo 时,根本不会出现 gorm 的错误)。
      - 匹配不到时就会走到 500 Failed to validate API key,导致无效 API key 被错误地当成服务端故障返回
        500(应该是 401)。
    
      修复思路:中间件不要依赖 gorm 的错误,改成判断业务层错误,例如:
    
      if errors.Is(err, service.ErrApiKeyNotFound) {
          abortWithGoogleError(c, 401, "Invalid API key")
          return
      }
    
      如果你把 GetByKey 的“not found”统一封装成业务错误,这样才不会被底层实现(gorm/redis/mock)影响。
    fd51ff69
api_key_auth_google.go 3.67 KB