มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก
เขียนและลงทะเบียนมิดเดิลแวร์ของ Gin
มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
ลายเซ็นของมิดเดิลแวร์ Gin
มิดเดิลแวร์ Gin คือ gin.HandlerFunc ที่เรียก c.Next() เพื่อส่งต่อการควบคุมไปยังตัวจัดการถัดไป หรือเรียก c.Abort() เพื่อหยุดสายการทำงาน
func MyMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// before handler
c.Next()
// after handler
}
}การใช้มิดเดิลแวร์ทั่วทั้งระบบ
ใช้ r.Use เพื่อใช้มิดเดิลแวร์กับเส้นทางทั้งหมด:
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())มิดเดิลแวร์สำหรับการบันทึกล็อก
gin.Logger() ในตัวของ Gin จะบันทึกเมธอด เส้นทาง สถานะ และเวลาแฝง หากต้องการการบันทึกแบบมีโครงสร้าง ให้แทนที่ด้วยมิดเดิลแวร์แบบกำหนดเองที่ใช้ zap หรือ 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)),
)
}
}มิดเดิลแวร์สำหรับการยืนยันตัวตน
ตรวจสอบ JWT หรือคีย์ API ในมิดเดิลแวร์ และยกเลิกการทำงานพร้อมสถานะ 401 หากไม่ถูกต้อง:
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()
}
}การส่งข้อมูลผ่านบริบท
จัดเก็บข้อมูลด้วย c.Set("key", value) และดึงข้อมูลในตัวจัดการด้วย c.Get("key") หรือฟังก์ชันช่วยเหลือที่มีชนิด เช่น c.MustGet:
user, _ := c.Get("user")
claims := user.(*Claims)มิดเดิลแวร์กู้คืน
gin.Recovery() ดักจับแพนิกและส่งการตอบกลับ 500 สามารถปรับแต่งให้บันทึกสแต็กเทรซหรือส่งไปยังบริการติดตามข้อผิดพลาดได้:
r.Use(gin.CustomRecovery(func(c *gin.Context, recovered any) {
log.Printf("panic: %v", recovered)
c.AbortWithStatusJSON(500, gin.H{"error": "internal server error"})
}))มิดเดิลแวร์ CORS
เพิ่มส่วนหัว CORS ด้วย 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,
}))มิดเดิลแวร์จำกัดอัตรา
ใช้บักเก็ตโทเคนแยกตาม IP ร่วมกับ golang.org/x/time/rate ภายในมิดเดิลแวร์เพื่อจำกัดอัตราคำขอ
มิดเดิลแวร์สำหรับ ID คำขอ
สร้าง ID คำขอที่ไม่ซ้ำกันสำหรับแต่ละคำขอ แล้วแนบไว้กับบริบทและส่วนหัวการตอบกลับ:
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()
}
}มิดเดิลแวร์ระดับกลุ่ม
ใช้มิดเดิลแวร์กับกลุ่มใดกลุ่มหนึ่งแทนการใช้ทั่วทั้งระบบ:
admin := r.Group("/admin")
admin.Use(AuthRequired(), AdminOnly())
admin.GET("/users", listUsers)ลำดับการทำงานของมิดเดิลแวร์
มิดเดิลแวร์จะทำงานตามลำดับการลงทะเบียนก่อนตัวจัดการ และทำงานย้อนลำดับหลังจาก c.Next() ส่งคืนค่า ลองนึกภาพว่าเป็นหัวหอม โดยแต่ละชั้นจะห่อหุ้มชั้นถัดไป
ตรวจสอบอย่างรวดเร็ว
มิดเดิลแวร์ Gin หยุดไม่ให้คำขอไปถึงตัวจัดการได้อย่างไร
ทบทวน: มิดเดิลแวร์ Gin
ประเด็นสำคัญ:
- HandlerFunc ที่ส่งคืน gin.HandlerFunc และเรียก c.Next() เพื่อทำงานต่อ
- ใช้ c.Set/c.Get เพื่อส่งข้อมูลผ่านสายการทำงาน
- ใช้ c.AbortWithStatusJSON เพื่อหยุดสายการทำงานและส่งข้อผิดพลาด
- ใช้ทั่วทั้งระบบด้วย r.Use หรือใช้เฉพาะกลุ่มด้วย group.Use
เรียนรู้ Go ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก”
เขียนและลงทะเบียนมิดเดิลแวร์ของ Gin คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เราเตอร์ Gin และกลุ่มเส้นทาง
- การผูกคำขอและการตรวจสอบ
- ตัวช่วยการตอบกลับและรหัสสถานะ
- มิดเดิลแวร์ Gin: การยืนยันตัวตนและการบันทึก