Go Academy · Aula

Middleware do Gin: autenticação e logging

Escreva e registre middlewares do Gin

Aula 4 de 413 etapas

Middleware do Gin: autenticação e logging é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Assinatura de camada intermediária do Gin

Uma camada intermediária do Gin é uma gin.HandlerFunc que chama c.Next() para passar o controle ao próximo manipulador ou c.Abort() para interromper a cadeia.

func MyMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        // before handler
        c.Next()
        // after handler
    }
}

Aplicação global de camadas intermediárias

Utilize r.Use para aplicar uma camada intermediária a todas as rotas:

r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())

Registro em logs por camada intermediária

O gin.Logger() integrado do Gin registra o método, o caminho, o status e a latência. Para obter registros estruturados, substitua-o por uma camada intermediária personalizada usando zap ou slog:

func ZapLogger(logger *zap.Logger) gin.HandlerFunc {
    return func(c *gin.Context) {
        start := time.Now()
        c.Next()
        logger.Info("request",
            zap.String("method", c.Request.Method),
            zap.String("path", c.FullPath()),
            zap.Int("status", c.Writer.Status()),
            zap.Duration("latency", time.Since(start)),
        )
    }
}

Camada intermediária de autenticação

Valide um JWT ou uma chave de API na camada intermediária e interrompa a execução com 401 se o valor for inválido:

func AuthRequired() gin.HandlerFunc {
    return func(c *gin.Context) {
        token := c.GetHeader("Authorization")
        claims, err := validateJWT(token)
        if err != nil {
            c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "invalid token"})
            return
        }
        c.Set("user", claims)
        c.Next()
    }
}

Passagem de dados por meio do contexto

Armazene dados com c.Set("key", value) e recupere-os nos manipuladores com c.Get("key") ou com auxiliares tipados, como c.MustGet:

user, _ := c.Get("user")
claims := user.(*Claims)

Camada intermediária de recuperação

gin.Recovery() captura falhas graves e retorna uma resposta 500. Personalize-a para registrar o rastreamento da pilha ou enviar os dados para um serviço de acompanhamento de erros:

r.Use(gin.CustomRecovery(func(c *gin.Context, recovered any) {
    log.Printf("panic: %v", recovered)
    c.AbortWithStatusJSON(500, gin.H{"error": "internal server error"})
}))

Camada intermediária de CORS

Adicione cabeçalhos CORS com github.com/gin-contrib/cors:

r.Use(cors.New(cors.Config{
    AllowOrigins:     []string{"https://example.com"},
    AllowMethods:     []string{"GET", "POST", "PUT"},
    AllowHeaders:     []string{"Authorization", "Content-Type"},
    AllowCredentials: true,
}))

Camada intermediária de limitação de taxa

Utilize um depósito de tokens por IP com golang.org/x/time/rate dentro da camada intermediária para limitar a taxa de requisições.

Camada intermediária de ID da requisição

Gere um ID de requisição exclusivo para cada requisição e anexe-o ao contexto e ao cabeçalho de resposta:

func RequestID() gin.HandlerFunc {
    return func(c *gin.Context) {
        id := uuid.New().String()
        c.Set("requestID", id)
        c.Header("X-Request-ID", id)
        c.Next()
    }
}

Camada intermediária no nível do grupo

Aplique a camada intermediária a um grupo específico em vez de aplicá-la globalmente:

admin := r.Group("/admin")
admin.Use(AuthRequired(), AdminOnly())
admin.GET("/users", listUsers)

Ordem de execução das camadas intermediárias

A camada intermediária é executada na ordem de registro antes do manipulador e na ordem inversa depois que c.Next() retorna. Pense nela como uma cebola: cada camada envolve a próxima.

Verificação rápida

Como a camada intermediária do Gin impede que uma requisição chegue ao manipulador?

Recapitulação: camadas intermediárias do Gin

Pontos principais:

  • HandlerFunc que retorna gin.HandlerFunc; chame c.Next() para continuar
  • c.Set/c.Get para passar dados pela cadeia
  • c.AbortWithStatusJSON para interromper a cadeia e enviar um erro
  • Aplique globalmente com r.Use ou por grupo com group.Use
Grátis para começar

Aprenda Go com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Middleware do Gin: autenticação e logging” é grátis?

Sim — o texto completo de “Middleware do Gin: autenticação e logging” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Middleware do Gin: autenticação e logging”?

Escreva e registre middlewares do Gin Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Middleware do Gin: autenticação e logging”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Roteador Gin e grupos de rotas
  2. Vinculação e validação de requisições
  3. Auxiliares de resposta e códigos de status
  4. Middleware do Gin: autenticação e logging
← Voltar para Go Academy