مرحبًا يا رفاق، لدي حالة استخدام لا تدعم حاليًا بشكل جيد: أحتاج إلى تعطيل بريد التفعيل للمستخدمين المدعوين — بما في ذلك المستخدمين المدعوين عبر رابط.
بعد أن بدأت الموضوع المذكور أعلاه، تم تنفيذه، ولكن فقط للمستخدمين المدعوين عبر البريد الإلكتروني.
مثال Discourse الخاص بي يعتمد على الدعوات فقط، وأنا فعليًا أرسل روابط الدعوة عبر البريد الإلكتروني، لكن ليس عبر رسائل البريد الإلكتروني المدمجة في Discourse. أنا أولد روابط الدعوة عبر طلب POST إلى /invites/link وأخزنها في قاعدة بيانات خارجية، ومن هناك أرسل الروابط إلى المستخدم. لذا عندما يضغط المستخدم على الرابط، فقد قام بالفعل بالتحقق من بريده الإلكتروني، لكنه يُطلب منه القيام بذلك مرة أخرى.
أدرك أن حالتي ليست شائعة بشكل خاص، لذا فكرت في محاولة بناء إضافة بسيطة لتعديل الأجزاء المطلوبة من Discourse لجعلها تعمل بالطريقة التي أحتاجها.
لدي الآن هيكل أساسي يعمل، وأضفت إعداد موقع (no_activation_enabled). بعد البحث في مستودع النواة، أعتقد أن هذا قد يكون الملف الذي يحتاج إلى تعديل:
لست متأكدًا تمامًا، لكنني أعتقد أنه ربما عن طريق تغيير active إلى true بشكل مشروط (إذا كان SiteSetting.no_activation_enabled مفعّلًا وإذا كان المستخدم قد دُعي بواسطة موظف، ربما invite.invited_by.staff؟) في user.attributes قد يكون ذلك حلًا:
لكن كيف يمكنني القيام بذلك من خلال إضافة؟ هل هذا حتى ضمن نطاق ما يمكن للإضافات فعله؟ أم أنها يمكنها فقط إضافة أشياء وليس تعديلها؟ أو هل يجب أن أستبدل ملف invite_redeemer.rb بالكامل؟
لقد أكملت مقدمة بناء الإضافات، وكذلك هذا الدليل، لكن بعد ساعات من محاولة البحث في قاعدة الكود بما في ذلك إضافات أخرى، أشعر وكأنني أضرب رأسي في جدار… لذا إذا كان لدى أي شخص أي توجيهات لي، سأكون ممتنًا للغاية!
لا أدير حسابات المستخدمين على موقع خارجي. لدي نظام رئيسي يربط بين Airtable و Zapier و GCFs لربط عدة خدمات (مثل ESPs وغيرها)، لكن Discourse هو قاعدة بيانات المستخدمين الرئيسية. أنا فقط لا أرغب في استخدام نموذج التسجيل العادي في Discourse لأنه ليس فعالًا من حيث التحويلات ولا يمكن دمجه في منشورات المدونة مثلًا. بل العكس، فـ Discourse يعمل كمزود SSO لموقع المحتوى القائم على Jekyll، حيث يرسل طلبات fetch للتحقق مما إذا كان المستخدم مسجل الدخول في Discourse، ثم يعدّل صفحات المحتوى بناءً على ذلك.
مثل @Stephen، لست متأكدًا تمامًا مما إذا كانت هذه هي الأداة المناسبة، لكنني أثق بأنك قد فكّرت في الأمر بشكل كافٍ.
سأحاول تجنب ذلك بأي ثمن. فهناك دائمًا حل بديل، حتى لو اضطررت إلى تعديل فئة ما بطريقة Monkey Patch. لمزيد من المعلومات حول Monkey Patching في Discourse، راجع: Override existing Discourse methods in plugins.
المشكلة هي أن الدعوات التي أنشأتها لا تحتوي على emailed_status_type الصحيح، لذا فإن الشرط لا يتحقق. أعتقد أن الحل هنا هو إنشاء دعوات مختلفة من البداية. وهذا ما أركز عليه.
هذا في جوهره إعادة لإدخال ميزة تم إزالتها من النواة لأنها كانت خطيرة للغاية - إذا أخطأت في التعامل مع رموز الدعوة هذه، فإن أي شخص يسرقها (قبل أن يستخدمها المستلم المقصود) يمكنه تسجيل الدخول إلى المنتدى باسم المستلمين. أنصح بشدة بعدم استخدام أسلوب الدعوة هذا لأي حسابات مشرف أو مدير.
لهذا السبب، فإن الكود اللازم للتعامل مع هذا موجود بالفعل، لكنك ستحتاج إلى بعض التعديلات المخصصة للوصول إليه فعليًا.