0Pricing
Go Academy · Lekcja

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

  1. Router Gin i grupy tras
  2. Wiązanie żądań i walidacja
  3. Pomocnicze funkcje odpowiedzi i kody statusu
  4. Middleware Gin: uwierzytelnianie i logowanie
← Powrót do Go Academy