Middleware في Gin: المصادقة والتسجيل
كتابة Middleware في Gin وتسجيله
Middleware في Gin: المصادقة والتسجيل درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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() حالات panic وتعيد استجابة 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 داخل البرمجية الوسيطة للحد من معدلات الطلبات.
برمجية وسيطة لمعرّف الطلب
أنشئ معرّف طلب فريدًا لكل طلب، وأرفقه بالسياق وترويسة الاستجابة:
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 مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «Middleware في Gin: المصادقة والتسجيل» مجاني؟
نعم — نص درس «Middleware في Gin: المصادقة والتسجيل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «Middleware في Gin: المصادقة والتسجيل»؟
كتابة Middleware في Gin وتسجيله تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «Middleware في Gin: المصادقة والتسجيل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- موجّه Gin ومجموعات المسارات
- ربط الطلبات والتحقق من صحتها
- مساعدات الاستجابة ورموز الحالة
- Middleware في Gin: المصادقة والتسجيل