تدفقات المصادقة
يساعدك هذا الدليل على اختيار نمط المصادقة المناسب لتطبيق DYPAI.
استخدمه عند تقرير:
- ما إذا كان يمكن للمستخدمين التسجيل بأنفسهم
- ما إذا كان يجب أن يكون الوصول بدعوة فقط
- متى تستخدم endpoints من نوع
jwt - متى تستخدم endpoints من نوع
api_key - كيف تنظّم استدعاءات الواجهة مقابل الخادم
القاعدة الأساسية
في DYPAI، يجب أن تستخدم endpoints HTTP الموجّهة للتطبيق أحد هذين الوضعين:
jwt: الطلب مرتبط بمستخدم مسجّل الدخولapi_key: الطلب مرتبط بمفتاح المشروع، عادة من كود جانب الخادم
لا تصمّم endpoints عامة دون مصادقة.
جدول القرار السريع
| السيناريو | هل يمكن للمستخدم التسجيل؟ | وضع endpoint الرئيسي | النمط الموصى به |
|---|---|---|---|
| تطبيق عام مع إنشاء حساب | نعم | jwt | تسجيل + تأكيد البريد + جلسة مستخدم |
| تطبيق خاص لمستخدمين معروفين فقط | لا | jwt | تدفق المدير/الدعوة + تعيين كلمة المرور |
| بوابة داخلية B2B | عادة لا | jwt | يُجهَّز المستخدمون من المدير أو الدعوة |
| أتمتة الخلفية / cron / مزامنة | لا ينطبق | api_key | استدعاءات من خادم إلى خادم فقط |
| تطبيق مختلط (واجهة + مهام خلفية) | ربما | jwt + api_key | الواجهة تستخدم JWT، ومهام الخلفية تستخدم API Key |
التدفق 1: تطبيق عام مع تسجيل المستخدمين
استخدم هذا عندما:
- ينشئ المستخدمون حساباتهم بأنفسهم
- للتطبيق تسجيل دخول أو ملف شخصي أو لوحة تحكم أو بيانات يملكها المستخدم
- تحتاج سير العمل إلى
current_userأوcurrent_user_id
الإعداد الموصى به:
- فعّل التسجيل في Auth.
- أبقِ تأكيد البريد مفعّلاً ما لم يكن هناك سبب قوي لتعطيله.
- استخدم
dypai.auth.signUp()وdypai.auth.signInWithPassword()من التطبيق. - احمِ endpoints الأعمال بـ
auth_mode: "jwt". - استخدم
allowed_rolesفقط عندما تحتاج قيوداً حسب الدور.
مثال نموذجي:
- موقع تسويقي
- تطبيق SaaS
- لوحة تحكم العميل
const dypai = createClient(process.env.NEXT_PUBLIC_DYPAI_URL!);
await dypai.auth.signUp({
email,
password,
full_name,
});
استخدم jwt لشاشات التطبيق وإجراءات المستخدم:
const { data } = await dypai.api.get('get_profile');
التدفق 2: تطبيق خاص دون تسجيل مفتوح
استخدم هذا عندما:
- لا يجب أن ينشئ المستخدمون حسابات بأنفسهم
- يقرر فريقك من يحصل على الوصول
- هذا مشروع عميل أو لوحة داخلية أو بوابة شركاء أو أداة للموظفين
الإعداد الموصى به:
- لا تعرض تسجيلاً ذاتياً في الواجهة.
- أنشئ المستخدمين من تدفقات المدير/الخلفية.
- أرسل روابط دعوة أو روابط إعداد بأسلوب الاستعادة.
- دع المستخدم يعيّن كلمة مروره في تطبيقك.
- أبقِ endpoints التطبيق في وضع
jwt.
مثال نموذجي:
- المكتب الخلفي للشركة
- تطبيق خاص لعميل محدد
- منتج B2B بدعوة فقط
الإعداد الموصى به:
- ينشئ المدير المستخدم أو يدعوه.
- يفتح المستخدم رابط دعوة إلى مسار رد النداء في تطبيقك.
- يُصدر SDK حدث
PASSWORD_RECOVERY. - تعرض واجهتك شاشة تعيين كلمة المرور.
- يعمل المستخدم بعد ذلك بشكل طبيعي بمصادقة جلسة JWT.
dypai.auth.onAuthStateChange((event) => {
if (event === 'PASSWORD_RECOVERY') {
// Show set-password screen
}
});
التدفق 3: تطبيق داخلي يجهّزه المدير
هذا نسخة أصرم من نمط التطبيق الخاص.
استخدم هذا عندما:
- يمكن للموظفين أو المشغّلين أو المتعاونين الداخليين فقط الدخول
- يُنشئ فريقك كل الحسابات
- الأدوار مهمة جداً (
adminوeditorوviewerوغيرها)
الإعداد الموصى به:
- لا واجهة تسجيل عامة.
- ينشئ المدير المستخدمين.
- يمر الوصول إلى وظائف التطبيق عبر endpoints من نوع
jwt. - قيّد endpoints الحساسة بـ
allowed_roles.
مثال لتقسيم الأدوار:
admin: إدارة المستخدمين والنظامeditor: العمل التشغيليviewer: وصول للقراءة فقط
التدفق 4: من خادم إلى خادم أو مهام خلفية
استخدم هذا عندما:
- لا توجد جلسة مستخدم بشري
- يحتاج عامل أو مهمة cron أو وكيل webhook أو عملية خلفية إلى استدعاء المحرك
- لا يجب أن يعتمد الطلب على هوية المستخدم
الإعداد الموصى به:
- اضبط endpoint المستهدف بـ
auth_mode: "api_key". - استدعِه من كود جانب الخادم فقط.
- أرسل
X-API-KEY. - لا تعرض المفتاح في كود المتصفح.
أماكن جيدة لاستخدامه:
- Next.js Route Handlers
- Next.js Server Actions
- Server Components التي تستدعي منطقاً للخلفية فقط
- عمال Node
- مهام Python
- مهام cron
const dypai = createClient(
process.env.DYPAI_URL!,
process.env.DYPAI_API_KEY
);
await dypai.api.post('sync_data', payload);
أين تحفظ مفاتيح الـ API والأسرار
مفاتيح جانب الخادم ورموز الأطراف الثالثة مكانها في Backend Secrets (Ship → Frontend → Variables → Backend Secrets)، ويُشار إليها داخل سير العمل/endpoints كـ ctx.secrets.X أو ${ secrets.X }. تُشفَّر ولا تُشحن إلى المتصفح أبداً. تبويب Frontend (Build) العام يُدمَج في حزمة العميل — لا تضع أسراراً هناك أبداً. راجع أسرار الخلفية وبيانات الاعتماد.
بنية مختلطة: واجهة + مهام خادم
هذا شائع جداً وعادة أنظف إعداد.
النمط:
- تستخدم واجهة المتصفح/التطبيق
jwt - تستخدم مهام الخادم وتكاملات الخلفية
api_key
مثال للتقسيم:
create_order->jwtsync_erp_orders->api_key
هذا يتجنب تعريض بيانات اعتماد الخلفية في العميل مع إبقاء التدفقات الموجّهة للمستخدم بسيطة.
ما يجب تجنّبه
تجنّب هذه الأنماط:
- استخدام
api_keyمن كود مكشوف في المتصفح - تصميم endpoints مفتوحة/عامة دون مصادقة
- خلط منطق خاص بالمستخدم في endpoints من نوع
api_key - إرسال
user_idيدوياً عندما يجب أن يوفّره سياق JWT - استخدام
api_keyلإجراءات الواجهة العادية عندما يكونjwtهو النموذج الصحيح
التوصية حسب نوع التطبيق
تطبيق مستهلك / SaaS
- التسجيل: نعم
- تسجيل الدخول: نعم
- وضع endpoint الرئيسي:
jwt - endpoints خلفية اختيارية:
api_key
تطبيق عميل خاص
- التسجيل: لا
- الدعوة/التجهيز: نعم
- وضع endpoint الرئيسي:
jwt - تدفق إعداد المدير: دعوة/تعيين كلمة المرور
تطبيق عمليات داخلية
- التسجيل: لا
- التجهيز: المدير فقط
- وضع endpoint الرئيسي:
jwt allowed_rolesقوي: نعم
طبقة تكامل في الخلفية
- التسجيل: غير ذي صلة
- جلسة المستخدم: لا
- وضع endpoint الرئيسي:
api_key
توصية عملية
إذا لم تكن متأكداً، ابدأ بهذا:
- لشاشات التطبيق الموجّهة للمستخدم، استخدم
jwt. - لأتمتة الخلفية فقط، استخدم
api_key. - إذا كان يجب ألا يسجّل المستخدمون بأنفسهم، أزل واجهة التسجيل واستخدم تدفقات الدعوة/التجهيز.