كل خطة مشروع كتبتها على الإطلاق تضمنت بندًا: "المصادقة — يومان."
كل مراجعة لمشروع احتوت على ملاحظة: "المصادقة استغرقت أسبوعين."
لقد بنيت أنظمة مصادقة 4 مرات حتى الآن. في كل مرة، أستهين بها. إليك السبب، وما تعلمته أخيرًا.
جبل الجليد
ما تظن أن المصادقة هي:
- نموذج تسجيل دخول
- تخزين رمز مميز
- التحقق من صحة الرمز
- انتهى
ما هي المصادقة فعليًا:
- نموذج تسجيل دخول (بريد إلكتروني/كلمة مرور + OAuth + روابط سحرية + MFA؟)
- تجزئة كلمة المرور (bcrypt, argon2, ما عامل التكلفة؟)
- إدارة الجلسات (JWT مقابل ملف تعريف ارتباط الجلسة مقابل كليهما؟)
- تحديث الرمز المميز (تحديث صامت، تدوير، إبطال)
- حماية CSRF (ملفات تعريف الارتباط لنفس الموقع، رمز الإرسال المزدوج)
- تحديد المعدل (عند تسجيل الدخول، عند التسجيل، عند إعادة تعيين كلمة المرور)
- تدفق إعادة تعيين كلمة المرور (إنشاء رمز، انتهاء الصلاحية، استخدام لمرة واحدة)
- التحقق من البريد الإلكتروني (رمز، منطق إعادة الإرسال، ماذا لو غيروا البريد الإلكتروني؟)
- قفل الحساب (كم عدد المحاولات؟ ما هو تدفق فتح القفل؟)
- التحكم بالوصول المستند إلى الدور (مسؤول مقابل مستخدم مقابل مشرف)
- إدارة مفاتيح API (للوصول البرمجي)
- إبطال الجلسة عند تغيير كلمة المرور
- "تذكرني" مقابل "هذه الجلسة فقط"
- إشعار تسجيل الدخول من جهاز جديد
- تسجيل التدقيق (من سجل الدخول، متى، من أين)
هذه 15+ ميزة. بمعدل 1-2 يوم لكل منها، أنت تتحدث عن شهر.
ما أفعله الآن: استخدام Supabase Auth والتوسيع
بعد بناء مصادقة مخصصة مرتين ومعاناة حياتي في كلتا المرتين، أبدأ الآن مع Supabase Auth (أو Clerk، أو Auth.js). إنها تتعامل مع:
- البريد الإلكتروني/كلمة المرور مع bcrypt
- موفري OAuth (Google, GitHub, Discord)
- رموز JWT مع التحديث
- التحقق من البريد الإلكتروني
- إعادة تعيين كلمة المرور
- إدارة الجلسات
- تحديد المعدل
هذا 80% من المصادقة، يديرها أشخاص يفكرون في المصادقة بدوام كامل. أركز على الـ 20% الخاصة بتطبيقي:
\\
