المستوى المطلوب: متوسط — تحتاج معرفة أساسية بـ Node.js و Express وكيف يشتغل الـ HTTP request/response. مش مطلوب خبرة سابقة بـ OAuth.
اعمل تسجيل دخول بحساب جوجل في Node.js بـ OAuth 2.0
في آخر هذا الدليل هيكون عندك زر "Sign in with Google" شغّال فعلاً: المستخدم يضغط، يوافق عند جوجل، ويرجع لموقعك وهو مسجّل دخول بإيميل موثّق. كله في أقل من 80 سطر Node.js، من غير ما تخزّن كلمة سر واحدة.
المشكلة باختصار
تخزين كلمات السر مسؤولية تقيلة: هاش، ملح، سياسة تعقيد، إعادة تعيين، وتسريبات محتملة. أغلب المستخدمين أصلاً عندهم حساب جوجل. تسجيل الدخول بجوجل بينقل عبء التحقق من الهوية لجوجل، فبتكسب أمان أعلى وتجربة أسرع. الافتراض هنا إن جمهورك بيستخدم Gmail أو Google Workspace فعلاً.
خلّينا نفهم OAuth بمثال بسيط الأول. تخيّل إنك داخل فندق. بدل ما تدّي عامل صف السيارات مفتاح بيتك كله، بتدّيله مفتاح مؤقت للعربية بس. هو يركن العربية، والمفتاح ده مبيفتحش بيتك ولا ينفع بعد ما تمشي. OAuth 2.0 بالظبط كده: موقعك ميشوفش باسورد المستخدم أبداً، بياخد بس "تصريح مؤقت" من جوجل يقول "الشخص ده فعلاً فلان، وإيميله كذا".
علمياً: OAuth 2.0 (المعرّف في RFC 6749) هو بروتوكول تفويض. الطريقة اللي بنستخدمها هنا اسمها Authorization Code Flow. موقعك بيوجّه المستخدم لجوجل، جوجل بترجّعه ومعاه كود تفويض قصير العمر، وموقعك بيبدّل الكود ده — من السيرفر للسيرفر — بـ access_token وid_token. الـ id_token هو اللي بيهمنا: توكن JWT فيه هوية المستخدم موقّعة من جوجل.
الخطوات كاملة
- سجّل تطبيقك في Google Cloud Console. افتح APIs & Services > Credentials، اختر Create Credentials > OAuth client ID، النوع Web application. هيديك
Client IDوClient Secret. النتيجة المتوقّعة: بيانات اعتماد تقدر تستخدمها في الكود. - ضيف الـ redirect URI المصرّح به. في نفس الشاشة، تحت Authorized redirect URIs، ضيف
http://localhost:3000/auth/google/callbackبالظبط. لو الرابط مختلف حرف واحد، جوجل هترفض الطلب بخطأredirect_uri_mismatch. - ركّب المكتبات.
npm install express google-auth-library express-session dotenvواحفظ بياناتك في ملف .env — ممنوع تحطها في الكود مباشرة: