عميل OAuth لـ Node.js: تنفيذ التفويض عبر Google وGitHub

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل OAuth لـ JavaScript (Node.js): دليل كامل

\n\n

OAuth (Open Authorization) هو بروتوكول مفتوح يسمح بتوفير وصول محدود لتطبيق طرف ثالث إلى موارد المستخدم دون نقل اسم المستخدم وكلمة المرور الخاصة به. في عالم Node.js، يعد تنفيذ عميل OAuth من أكثر المهام شيوعًا عند إنشاء تطبيقات الويب الحديثة. في هذه المقالة، سنشرح بالتفصيل كيفية كتابة عميل OAuth خاص بك للتفويض عبر Google وGitHub باستخدام المكتبة الشهيرة Passport.js.

\n\n

ما هو OAuth 2.0 ولماذا هو مطلوب؟

\n

OAuth 2.0 هو معيار يُستخدم لتفويض الوصول. بدلاً من تخزين كلمات مرور المستخدمين على خادمك، تقوم بتوجيههم إلى صفحة المزود (Google، GitHub، Facebook) حيث يمنحون الموافقة. بعد ذلك، يتلقى تطبيقك access token (رمز وصول)، يمكنه من خلاله الوصول إلى API الخاص بالمزود نيابة عن المستخدم.

\n\n

المزايا الرئيسية:

\n
    \n
  • الأمان — لا يتم تخزين كلمات المرور على خادمك.
  • \n
  • الراحة للمستخدم — لا حاجة للتسجيل مرة أخرى.
  • \n
  • المرونة — يمكن طلب البيانات الضرورية فقط (النطاق).
  • \n
\n\n

تثبيت الحزم اللازمة

\n

للعمل مع OAuth في Node.js، سنستخدم المكتبات التالية:

\n
    \n
  • express — إطار عمل ويب
  • \n
  • passport — middleware للمصادقة
  • \n
  • passport-google-oauth20 — استراتيجية لـ Google
  • \n
  • passport-github2 — استراتيجية لـ GitHub
  • \n
  • express-session — لتخزين الجلسات
  • \n
\n\n

قم بتثبيتها بأمر واحد:

\n
npm install express passport passport-google-oauth20 passport-github2 express-session
\n\n

الإعداد الأساسي للخادم

\n

لننشئ ملف app.js ونقوم بتضمين جميع الوحدات اللازمة:

\n
const express = require('express');\nconst passport = require('passport');\nconst session = require('express-session');\nconst app = express();\n\n// إعداد الجلسات\napp.use(session({\n    secret: 'your-secret-key',\n    resave: false,\n    saveUninitialized: true\n}));\n\napp.use(passport.initialize());\napp.use(passport.session());\n\n// دالة وهمية لتسلسل المستخدم\npassport.serializeUser((user, done) => done(null, user));\npassport.deserializeUser((obj, done) => done(null, obj));\n\napp.listen(3000, () => console.log('الخادم يعمل على المنفذ 3000'));
\n\n

إعداد استراتيجية OAuth لـ Google

\n

قبل البدء، تحتاج إلى تسجيل التطبيق في Google Cloud Console والحصول على Client ID و Client Secret. حدد في الإعدادات redirect URI: http://localhost:3000/auth/google/callback.

\n\n
const GoogleStrategy = require('passport-google-oauth20').Strategy;\n\npassport.use(new GoogleStrategy({\n    clientID: 'GOOGLE_CLIENT_ID_الخاص_بك',\n    clientSecret: 'GOOGLE_CLIENT_SECRET_الخاص_بك',\n    callbackURL: 'http://localhost:3000/auth/google/callback'\n}, (accessToken, refreshToken, profile, done) => {\n    // هنا يمكنك حفظ الملف الشخصي في قاعدة البيانات\n    return done(null, profile);\n}));\n\n// مسارات Google OAuth\napp.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));\n\napp.get('/auth/google/callback', \n    passport.authenticate('google', { failureRedirect: '/' }),\n    (req, res) => res.redirect('/profile')\n);
\n\n

إعداد استراتيجية OAuth لـ GitHub

\n

بالنسبة لـ GitHub، قم بتسجيل تطبيق OAuth في GitHub Developer Settings. Homepage URL: http://localhost:3000، Authorization callback UR

توصيات