Middleware Gin: Pengesahan dan Logging
Menulis dan mendaftarkan middleware Gin
Middleware Gin: Pengesahan dan Logging ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Tandatangan perisian tengah Gin
Perisian tengah Gin ialah gin.HandlerFunc yang memanggil c.Next() untuk menyerahkan kawalan kepada pengendali seterusnya, atau c.Abort() untuk menghentikan rantaian.
func MyMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// before handler
c.Next()
// after handler
}
}Menggunakan perisian tengah secara global
Gunakan r.Use untuk menggunakan perisian tengah pada semua laluan:
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())Perisian tengah pengelogan
gin.Logger() terbina dalam Gin merekodkan kaedah, laluan, status dan kependaman. Untuk pengelogan berstruktur, gantikannya dengan perisian tengah tersuai yang 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)),
)
}
}Perisian tengah pengesahan
Sahkan JWT atau kunci API dalam perisian tengah dan hentikan pemprosesan dengan 401 jika tidak sah:
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()
}
}Menghantar data melalui konteks
Simpan data dengan c.Set("key", value) dan dapatkannya dalam pengendali dengan c.Get("key") atau pembantu bertip seperti c.MustGet:
user, _ := c.Get("user")
claims := user.(*Claims)Perisian tengah pemulihan
gin.Recovery() menangkap panik dan mengembalikan respons 500. Sesuaikannya untuk merekod surih tindanan atau menghantar data kepada perkhidmatan penjejakan ralat:
r.Use(gin.CustomRecovery(func(c *gin.Context, recovered any) {
log.Printf("panic: %v", recovered)
c.AbortWithStatusJSON(500, gin.H{"error": "internal server error"})
}))Perisian tengah CORS
Tambahkan pengepala 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,
}))Perisian tengah pengehad kadar
Gunakan baldi token bagi setiap IP dengan golang.org/x/time/rate dalam perisian tengah untuk mengehadkan kadar permintaan.
Perisian tengah ID permintaan
Jana ID permintaan unik bagi setiap permintaan dan lampirkannya pada konteks serta pengepala 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()
}
}Perisian tengah peringkat kumpulan
Gunakan perisian tengah pada kumpulan tertentu dan bukannya secara global:
admin := r.Group("/admin")
admin.Use(AuthRequired(), AdminOnly())
admin.GET("/users", listUsers)Urutan pelaksanaan perisian tengah
Perisian tengah dijalankan mengikut urutan pendaftaran sebelum pengendali, dan mengikut urutan terbalik selepas c.Next() dikembalikan. Bayangkannya seperti bawang — setiap lapisan membalut lapisan seterusnya.
Semakan Ringkas
Bagaimanakah perisian tengah Gin menghalang permintaan daripada mencapai pengendali?
Imbas Kembali: Perisian Tengah Gin
Perkara utama:
- HandlerFunc yang mengembalikan gin.HandlerFunc; panggil c.Next() untuk meneruskan
- c.Set/c.Get untuk menghantar data melalui rantaian
- c.AbortWithStatusJSON untuk menghentikan rantaian dan menghantar ralat
- Gunakan secara global dengan r.Use atau mengikut kumpulan dengan group.Use
Pelajari Go dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Middleware Gin: Pengesahan dan Logging” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Middleware Gin: Pengesahan dan Logging”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Middleware Gin: Pengesahan dan Logging”?
Menulis dan mendaftarkan middleware Gin Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Go Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Middleware Gin: Pengesahan dan Logging” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penghala Gin dan Kumpulan Laluan
- Pengikatan dan Pengesahan Permintaan
- Pembantu Respons dan Kod Status
- Middleware Gin: Pengesahan dan Logging