Middleware Gin: Autentikasi dan Logging
Menulis dan mendaftarkan middleware Gin
Middleware Gin: Autentikasi dan Logging adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Signatur perangkat tengah Gin
Perangkat tengah Gin adalah gin.HandlerFunc yang memanggil c.Next() untuk meneruskan kendali ke penangan berikutnya, atau c.Abort() untuk menghentikan rantai.
func MyMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// before handler
c.Next()
// after handler
}
}Menerapkan perangkat tengah secara global
Gunakan r.Use untuk menerapkan perangkat tengah ke semua rute:
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())Perangkat tengah pencatatan
gin.Logger() bawaan Gin mencatat metode, jalur, status, dan latensi. Untuk pencatatan terstruktur, gantikan dengan perangkat tengah khusus menggunakan zap atau 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)),
)
}
}Perangkat tengah autentikasi
Validasi JWT atau kunci API di perangkat tengah, lalu batalkan dengan 401 jika tidak valid:
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()
}
}Meneruskan data melalui konteks
Simpan data dengan c.Set("key", value) dan ambil kembali di penangan dengan c.Get("key") atau pembantu bertipe seperti c.MustGet:
user, _ := c.Get("user")
claims := user.(*Claims)Perangkat tengah pemulihan
gin.Recovery() menangkap kepanikan dan mengembalikan respons 500. Sesuaikan untuk mencatat jejak tumpukan atau mengirimkannya ke layanan pelacakan error:
r.Use(gin.CustomRecovery(func(c *gin.Context, recovered any) {
log.Printf("panic: %v", recovered)
c.AbortWithStatusJSON(500, gin.H{"error": "internal server error"})
}))Perangkat tengah CORS
Tambahkan header CORS dengan 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,
}))Perangkat tengah pembatasan laju
Gunakan keranjang token per IP dengan golang.org/x/time/rate di dalam perangkat tengah untuk membatasi laju permintaan.
Perangkat tengah Request ID
Buat Request ID unik untuk setiap permintaan, lalu tambahkan ke konteks dan header respons:
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()
}
}Perangkat tengah tingkat grup
Terapkan perangkat tengah ke grup tertentu, bukan secara global:
admin := r.Group("/admin")
admin.Use(AuthRequired(), AdminOnly())
admin.GET("/users", listUsers)Urutan eksekusi perangkat tengah
Perangkat tengah berjalan sesuai urutan pendaftaran sebelum penangan, lalu dalam urutan terbalik setelah c.Next() selesai. Bayangkan seperti bawang — setiap lapisan membungkus lapisan berikutnya.
Pemeriksaan Singkat
Bagaimana perangkat tengah Gin menghentikan permintaan agar tidak mencapai penangan?
Ringkasan: Perangkat Tengah Gin
Poin utama:
- HandlerFunc yang mengembalikan gin.HandlerFunc; panggil c.Next() untuk melanjutkan
- c.Set/c.Get untuk meneruskan data melalui rantai
- c.AbortWithStatusJSON untuk menghentikan rantai dan mengirim error
- Terapkan secara global dengan r.Use atau per grup dengan group.Use
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Middleware Gin: Autentikasi dan Logging” gratis?
Ya — teks lengkap “Middleware Gin: Autentikasi dan Logging” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Middleware Gin: Autentikasi dan Logging”?
Menulis dan mendaftarkan middleware Gin Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Middleware Gin: Autentikasi dan Logging” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Router Gin dan Grup Rute
- Pengikatan dan Validasi Permintaan
- Pembantu Respons dan Kode Status
- Middleware Gin: Autentikasi dan Logging