المصادقة
استراتيجية مصادقة مزدوجة: جلسة/كوكيز لـ لوحة تحكم الويب، JWT لتطبيقات الجوال. OTP عبر الهاتف هو طريقة المصادقة الأساسية للعملاء.
تدفق مصادقة العميل
يتم مصادقة العملاء باستخدام رقم هاتفهم. OTP هو الطريقة الأساسية، مع PIN كاختصار أسرع للمستخدمين العائدين.
تسجيل دخول العميل لأول مرة
تسجيل دخول العميل العائد
أو استخدام تدفق OTP مرة أخرى (متاح دائماً كبديل)
- رقم الهاتف هو المعرّف الأساسي (الصيغة السعودية:
05XXXXXXXX، 10 أرقام) - OTP: رمز من 6 أرقام، ينتهي خلال 5 دقائق، يُرسل عبر WhatsApp (أساسي) أو SMS (بديل)
- PIN: رقمي من 6 خانات، يُعيَّن بعد أول تحقق ناجح من OTP
- المستخدمون العائدون يمكنهم استخدام PIN مباشرة لتسجيل دخول أسرع بدون انتظار OTP
مصادقة المسؤول / مدير الملعب
مستخدمو المسؤول ومدير الملعب يتم مصادقتهم عبر البريد الإلكتروني وكلمة المرور التقليدية، ويحصلون على كوكي جلسة من جانب الخادم.
تسجيل دخول المسؤول ومدير الملعب
assigned_field_ids الخاصة بهم. هذا مُطبّق على مستوى الـ middleware — كل استعلام يُصفّى تلقائياً ليشمل ملاعبهم المُعيّنة فقط. هذا ليس قيداً على مستوى واجهة المستخدم؛ بل مُطبّق من الخادم.
استراتيجية التوكن المزدوجة
يستخدم النظام آليتي مصادقة لخدمة أنواع مختلفة من العملاء.
| الاستراتيجية | المستخدم | الآلية | المهلة |
|---|---|---|---|
| Session / Cookie | لوحة تحكم الويب | جلسة من جانب الخادم، كوكي HTTP-only | 24 ساعة عدم نشاط |
| JWT | تطبيقات الجوال | توكن Bearer في ترويسة Authorization | 24 ساعة عدم نشاط، آلية تجديد |
تحديد المعدل
حدود المعدل تحمي من هجمات القوة الغاشمة وإساءة استخدام نظام إرسال OTP.
| القاعدة | الحد | النافذة |
|---|---|---|
| إرسال OTP لكل هاتف | 3 طلبات | 15 دقيقة |
| إرسال OTP عام | 10 طلبات | دقيقة واحدة |
| محاولات التحقق من OTP | 5 محاولات | لكل رمز |
| محاولات التحقق من PIN | 10 محاولات | ثم قفل الحساب |
| محاولات تسجيل الدخول لكل IP | 20 محاولة | 15 دقيقة |
قفل PIN
يُسجَّل القفل في جدول login_attempts لتدقيق الأمان. يمكن للمسؤولين عرض سجل القفل في لوحة تحكم المسؤول لتحديد أنماط الهجمات المحتملة.
دورة حياة توكن JWT
- توكن الوصول: ينتهي خلال 24 ساعة، قابل للتجديد قبل انتهاء الصلاحية
- توكن التجديد: ينتهي خلال 30 يوماً، يُستخدم للحصول على توكن وصول جديد بدون إعادة المصادقة
- إعادة تعيين عدم النشاط: عند كل طلب API بتوكن صالح، يُعاد تعيين مؤقت عدم النشاط — المستخدمون النشطون لا يُجبرون أبداً على إعادة تسجيل الدخول
- حمولة التوكن تحتوي على:
user_id،role،assigned_field_ids(لنطاق مدير الملعب)
assigned_field_ids حتى يتمكن الـ API من تصفية الاستعلامات بدون بحث إضافي في قاعدة البيانات عند كل طلب. إذا تغيّرت تعيينات الملاعب، يجب على مدير الملعب إعادة المصادقة للحصول على توكن جديد بمعرّفات الملاعب المحدّثة.
اعتبارات الأمان
تشفير كلمات المرور
جميع كلمات المرور مُشفّرة بـ bcrypt (عامل التكلفة 12). لا تُخزَّن أبداً كنص صريح.
تخزين OTP
رموز OTP تُخزَّن مُشفّرة، وليس كنص صريح. حتى لو تم اختراق قاعدة البيانات، لا يمكن استخراج الرموز.
توكنات الجلسة
توكنات الجلسة عشوائية تشفيرياً بمستوى كافٍ من العشوائية لمنع التخمين أو التعداد.
أمان النقل
HTTPS مطلوب لجميع نقاط النهاية. لا يوجد بديل HTTP. CORS مُهيّأ للأصول المعروفة فقط.