كيف تنظم المصادقة بشكل صحيح في Go؟ (JWT، الجلسات، الوسيط)
مرحبًا بالجميع! أنا مطور Go مبتدئ، أكتب أول REST API خاص بي بلغة Go النقية (بدون أطر عمل مثل Gin أو Echo). علقت في مسألة المصادقة. قرأت الكثير من المقالات، لكن في كل مكان يُقترح طرق مختلفة: شخص يستخدم JWT، وآخر يستخدم الجلسات مع الكوكيز، وآخر يستخدم OAuth2 عبر خدمات خارجية. أنا مرتبك تمامًا.
مهمتي: عمل API بسيط للملاحظات. المستخدم يسجل، يسجل الدخول، يحصل على رمز مميز ثم يستخدمه للوصول إلى نقاط النهاية المحمية. حاليًا كتبت هذا الكود البدائي للتحقق من كلمة المرور في المعالج:
```go
func loginHandler(w http.ResponseWriter, r *http.Request) {
// ... تحليل JSON مع اسم المستخدم وكلمة المرور
user, err := findUserByEmail(email)
if err != nil || !checkPasswordHash(password, user.Hash) {
http.Error(w, "unauthorized", http.StatusUnauthorized)
return
}
// وماذا بعد؟ كيف أحفظ حقيقة المصادقة؟
w.Write([]byte("logged in"))
}
```
الأسئلة:
1. أي نهج يُعتبر حاليًا