Middleware de Gin: autenticación y registro
Escritura y registro de middleware de Gin
Middleware de Gin: autenticación y registro es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Firma del middleware de Gin
El middleware de Gin es un gin.HandlerFunc que llama a c.Next() para pasar el control al siguiente controlador, o a c.Abort() para detener la cadena.
func MyMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// before handler
c.Next()
// after handler
}
}Aplicación global del middleware
Use r.Use para aplicar el middleware a todas las rutas:
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())Middleware de registro
El gin.Logger() integrado de Gin registra el método, la ruta, el estado y la latencia. Para usar registros estructurados, sustitúyalo por un middleware personalizado con zap o 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)),
)
}
}Middleware de autenticación
Valide un JWT o una clave de API en el middleware y cancele la ejecución con 401 si no es vá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()
}
}Transferencia de datos mediante el contexto
Almacene datos con c.Set("key", value) y recupérelos en los controladores con c.Get("key") o con asistentes tipados como c.MustGet:
user, _ := c.Get("user")
claims := user.(*Claims)Middleware de recuperación
gin.Recovery() captura los panics y devuelve una respuesta 500. Personalícelo para registrar el seguimiento de la pila o enviarlo a un servicio de seguimiento de errores:
r.Use(gin.CustomRecovery(func(c *gin.Context, recovered any) {
log.Printf("panic: %v", recovered)
c.AbortWithStatusJSON(500, gin.H{"error": "internal server error"})
}))Middleware de CORS
Añada encabezados CORS con 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,
}))Middleware de limitación de velocidad
Use un token bucket por IP con golang.org/x/time/rate dentro del middleware para limitar la frecuencia de las solicitudes.
Middleware de ID de solicitud
Genere un ID de solicitud único para cada solicitud y asócielo al contexto y al encabezado de respuesta:
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()
}
}Middleware a nivel de grupo
Aplique el middleware a un grupo específico en lugar de aplicarlo globalmente:
admin := r.Group("/admin")
admin.Use(AuthRequired(), AdminOnly())
admin.GET("/users", listUsers)Orden de ejecución del middleware
El middleware se ejecuta en el orden de registro antes del controlador y en orden inverso después de que c.Next() retorna. Piense en ello como una cebolla: cada capa envuelve la siguiente.
Comprobación rápida
¿Cómo impide el middleware de Gin que una solicitud llegue al controlador?
Recapitulación: middleware de Gin
Puntos clave:
- Una función HandlerFunc devuelve gin.HandlerFunc; llame a c.Next() para continuar
- Use c.Set/c.Get para pasar datos por la cadena
- Use c.AbortWithStatusJSON para detener la cadena y enviar un error
- Aplique el middleware globalmente con r.Use o por grupo con group.Use
Aprende Go con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Middleware de Gin: autenticación y registro» es gratis?
Sí — el texto completo de «Middleware de Gin: autenticación y registro» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Middleware de Gin: autenticación y registro»?
Escritura y registro de middleware de Gin Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Middleware de Gin: autenticación y registro»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Router Gin y grupos de rutas
- Vinculación y validación de solicitudes
- Helpers de respuesta y códigos de estado
- Middleware de Gin: autenticación y registro