Middleware do Gin: autenticação e logging
Escreva e registre middlewares do Gin
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
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
- Roteador Gin e grupos de rotas
- Vinculação e validação de requisições
- Auxiliares de resposta e códigos de status
- Middleware do Gin: autenticação e logging