Middleware Gin: uwierzytelnianie i logowanie
Pisanie i rejestrowanie middleware Gin
Middleware Gin: uwierzytelnianie i logowanie to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Sygnatura middleware Gin
Middleware Gin to gin.HandlerFunc, który wywołuje c.Next(), aby przekazać sterowanie do kolejnego programu obsługi, albo c.Abort(), aby zatrzymać łańcuch.
func MyMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// before handler
c.Next()
// after handler
}
}Globalne stosowanie middleware
Użyj r.Use, aby zastosować middleware do wszystkich tras:
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())Middleware rejestrowania
Wbudowane gin.Logger() w Gin rejestruje metodę, ścieżkę, status i czas oczekiwania. Aby używać rejestrowania strukturalnego, zastąp je niestandardowym middleware korzystającym z zap lub 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 uwierzytelniania
W middleware weryfikuj JWT lub klucz API i przerywaj przetwarzanie ze statusem 401, jeśli dane są nieprawidłowe:
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()
}
}Przekazywanie danych przez kontekst
Przechowuj dane za pomocą c.Set("key", value) i pobieraj je w programach obsługi za pomocą c.Get("key") lub typowanych funkcji pomocniczych, takich jak c.MustGet:
user, _ := c.Get("user")
claims := user.(*Claims)Middleware odzyskiwania
gin.Recovery() przechwytuje paniki i zwraca odpowiedź 500. Dostosuj je tak, aby rejestrowało ślad stosu lub wysyłało go do usługi śledzenia błędów:
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 CORS
Dodawaj nagłówki CORS za pomocą 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 ograniczania liczby żądań
Używaj w middleware zasobnika tokenów dla każdego adresu IP z golang.org/x/time/rate, aby ograniczać częstotliwość żądań.
Middleware identyfikatora żądania
Generuj unikalny identyfikator dla każdego żądania i dołączaj go do kontekstu oraz nagłówka odpowiedzi:
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 na poziomie grupy
Stosuj middleware do określonej grupy zamiast globalnie:
admin := r.Group("/admin")
admin.Use(AuthRequired(), AdminOnly())
admin.GET("/users", listUsers)Kolejność wykonywania middleware
Middleware jest wykonywane w kolejności rejestracji przed programem obsługi oraz w odwrotnej kolejności po powrocie z c.Next(). Wyobraź je sobie jak cebulę — każda warstwa otacza następną.
Szybkie sprawdzenie
Jak middleware Gin zatrzymuje żądanie, aby nie dotarło do programu obsługi?
Podsumowanie: middleware Gin
Najważniejsze informacje:
- HandlerFunc zwracający gin.HandlerFunc; wywołuj c.Next(), aby kontynuować
- c.Set/c.Get do przekazywania danych przez łańcuch
- c.AbortWithStatusJSON do zatrzymania łańcucha i wysłania błędu
- Stosuj globalnie za pomocą r.Use lub dla grupy za pomocą group.Use
Często zadawane pytania
Czy lekcja „Middleware Gin: uwierzytelnianie i logowanie” jest bezpłatna?
Tak — pełny tekst „Middleware Gin: uwierzytelnianie i logowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Middleware Gin: uwierzytelnianie i logowanie”?
Pisanie i rejestrowanie middleware Gin Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Middleware Gin: uwierzytelnianie i logowanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Router Gin i grupy tras
- Wiązanie żądań i walidacja
- Pomocnicze funkcje odpowiedzi i kody statusu
- Middleware Gin: uwierzytelnianie i logowanie