تسجيل المستخدم
افتراضيًا يضيف المالك/الإدارة المستخدمين يدويًا (صفحة المستخدمين → مستخدم جديد). لنشر الملصق الأبيض التي تحتاج إلى onboard المستخدمين على نطاق واسع — أو دمج التطبيق مع خدمة أخرى — cMind يشحن أيضًا path تسجيل آمن وخدمة ذاتية. إنها معطلة افتراضيًا: نشر الأسهم غير متغير والصفحة وواجهة برمجة التطبيقات كلاهما إرجاع 404 حتى نشر يختار فيها.
هناك نقطتا دخول تشترك في تدفق مجال واحد:
- صفحة داخل التطبيق (
/register) — صفحة تسجيل مستخدم مخصصة وودية للهاتف المحمول في نفس shell كـ/login. - API التوفير (
POST /api/provision) — نقطة نهاية خادم إلى خادم لخدمة الدمج لـ إنشاء حسابات مصادقة سرية للتوفير لكل نشر.
ما يتم تسجيله — تقليل البيانات
cMind هو التداول الأدوات: بناء/تشغيل/backtest cBots وتعكس التجارة على كل مستخدم الخاص به بيانات اعتماد cTrader Open API. إنه لا يفتح حسابات التداول أو حسابات الأمانة لذلك KYC/AML التحقق من الهوية هو التزام الوسيط، وليس هذه المنصة. نموذج التسجيل وبالتالي سجلات بريد إلكتروني فقط افتراضيًا — الحد الأدنى اللازم لتوفير الخدمة (GDPR Art. 5(1)(c) البيانات تقليل؛ الأساس القانوني = العقد). cMind يشحن عن قصد لا المعرّف الوطني / تاريخ الميلاد / حقول العنوان.
كل سمة أخرى هي اختيارية لكل نشر عبر App:Registration:Attributes، كل واحد بشكل مستقل
Off / Optional / Required:
| السمة | الملاحظات |
|---|---|
FullName وDisplayName وCompany | نص حر، طول محدود. |
Country | ISO 3166-1 alpha-2، تحقق مقابل مجموعة رمز ثابتة. |
Phone | E.164 format (+14155552671). |
Locale | BCP-47 shape (en-US)، معاد تعيينه. |
MarketingOptIn | منفصل، غير محدد خانة اختيار — لا تدمج أبدًا مع الموافقة الإلزامية (CAN-SPAM). |
AgeConfirmation | خانة اختيار فقط؛ لا تاريخ الميلاد مخزن. |
تعيش السمات في UserProfile value object مملوكة AppUser aggregate، التحقق من
البناء. حذف GDPR (AppUser.Anonymize()) scrubs الملف الشخصي وأي رموز التحقق.
الموافقة. عندما يكون RequireTermsAcceptance على، يجب على المستخدم قبول الوثائق القانونية المنشورة
(الشروط والخصوصية وإفصاح المخاطر). يتم تسجيل القبول من خلال ConsentRecord aggregate الموجود —
نسخة موصوفة، موصوفة بالطابع الزمني، مع عنوان IP الأصلي — نفس المتجر المستخدم في مكان آخر لـ MiFID/ESMA-grade
الحفظ.
أنماط البوابة
لا يمكن لحساب مسجل ذاتيًا تسجيل الدخول حتى يمسح بوابته (App:Registration:Mode):
AdminApproval(الافتراضي) — الحساب في قائمة الانتظار؛ مالك/إدارة توافق عليها على صفحة المستخدمين (قسم الانتظار للموافقة). لا تحتاج إلى بنية بريد.EmailVerification— يتم إرسال رابط التحقق لمرة واحدة ومنتهي الصلاحية بالبريد الإلكتروني؛ يتم تفعيل الحساب عند يتم فتح الرابط. يتطلب نقل بريد (App:Email). إذا لم يتم تكوين نقل، هذا الوضع تلقائيًا ينخفض إلىAdminApprovalعند بدء التشغيل، لذا تمكين التسجيل لا يفسد أبدًا بصمت.Open— الحساب نشط على الفور (موثوق/تطوير فقط).
يتم إنشاء المستخدمين المسجلين ذاتيًا دائمًا كـ User (أو Viewer إذا تم تكوينه) — المجال
يرفض بقوة صك مالك/إدارة من خلال التسجيل الذاتي.
الأمان والحماية من الإساءة
- مكافحة الإعداد. البريد الإلكتروني المكرر يعطي نفس محايد
202 Acceptedكتسجيل جديد و لا ينشئ شيء — التطبيق لا يكشف أبدًا ما إذا كان العنوان بالفعل حساب. - حد المعدل. يتم تقليل نقاط النهاية العامة لكل IP (أصعب من مقيد المصادقة).
- سياسة كلمة المرور. الحد الأدنى للطول المفروض؛ يتم تجزئة كلمات المرور (Argon2 عبر
IPasswordHasher)؛ يتم تخزين رموز التحقق فقط كـ SHA-256 hashes وهي لمرة واحدة + منتهي الصلاحية. - نظافة البريد الإلكتروني. قائمة بيضاء اختيارية لنطاقات البريد الإلكتروني وحجب القائمة السوداء لموفر يمكن التخلص منه.
- CAPTCHA (اختياري). reCAPTCHA / hCaptcha / Turnstile عبر عقد التحقق المشترك الخاص بهم.
- بوابة تسجيل الدخول. يتم رفض حساب معلق عند تسجيل الدخول برد محايد.
API التوفير (التكامل)
مع App:Registration:Api:Enabled وتعيين Secret، يمكن لخدمة أخرى إنشاء مستخدمين:
POST /api/provision
X-Provision-Secret: <السر المشفر>
{ "email": "user@example.com", "password": "…", "role": 2 }
يتم مقارنة السر في الوقت الثابت. يتم إنشاء الحسابات المزودة نشطة (أو المدعوة مع
MustChangePassword) اعتمادًا على Api.ActivateImmediately / Api.InviteMustChangePassword.
تمكينها
يتطلب التسجيل كليهما علم الميزة والمفتاح الرئيسي:
"App": {
"Features": { "Registration": true },
"Registration": {
"Enabled": true,
"Mode": "AdminApproval", // أو EmailVerification / Open
"DefaultRole": "User", // أبدًا المالك/الإدارة
"RequireTermsAcceptance": true,
"AllowedEmailDomains": [], // فارغ = أي
"BlockDisposableEmail": true,
"Attributes": { "FullName": "Optional", "Country": "Off" },
"Api": { "Enabled": false, "Secret": "" }
}
}
يقوم قسم App:Email (SMTP Host وPort وUseStartTls وUsername وPassword وFromAddress و
FromName) بتكوين النقل المستخدم بواسطة وضع EmailVerification؛ ترك Host غير مجهز للتشغيل مع
بدون بريد (المرسل no-op). انظر feature toggles وwhite-label لـ
كيفية قيام النشر بتشغيل الميزات وإعادة الوسم. عند تمكين التسجيل، صفحة تسجيل الدخول تعرض إنشاء
حساب رابط.
مختبر
الوحدة (التحقق من الملف الشخصي وحارس دور SelfRegister واقترانات التفعيل والرموز المنفردة والمسح)،
التكامل (معطل-افتراضي 404 وتدفق الموافقة والتحقق من البريد الإلكتروني-downgrade وعدم الإعداد والإساءة
الحراس والسمات المطلوبة والتوفير + سر سيء) و E2E (تسجيل دخول الافتراضي-off بدون رابط اشتراك؛ ال
صفحة /register تعرض حالتها المغلقة المخصصة).