تسجيل دخول Rocket.Chat بواسطة SSO + إضافة الملحق المدمج

image

ملخص: يدمج هذا الإضافة Rocket.Chat مع Discourse.

تحتاج إلى الحصول على نسخة مستضافة منفصلة من Rocket.Chat، مثل تلك المقدمة من Communiteq أو Digital Ocean أو مزوّد آخر. يقوم هذا الإضافة بدمج هذه النسخة مع منتداك.

يتكون التكامل من جزأين:

  • تضمين الدردشة داخل واجهة مستخدم Discourse
  • تسجيل الدخول الموحد بين Discourse و Rocket.Chat، حيث تعمل Discourse كمزوّد مصادقة لمصادقة المستخدمين وإنشائهم وتحديثهم في Rocket.Chat.

:link: GitHub: GitHub - communiteq/discourse-rocketchat · GitHub
:arrow_right: التثبيت: اتبع دليل تثبيت الإضافة.
:pray:t3: الشكر: جاء @jrgong بفكرة رائعة لدمج Rocket.Chat مع Discourse وقام أيضًا بتطوير النسخة الأولى من واجهة المستخدم.

لقطات الشاشة

تم تضمين الدردشة في الزاوية اليمنى السفلية من واجهة Discourse. يمكن طيها وتوسيعها بالنقر على شريط العنوان. تبقى الدردشة مفتوحة عند التنقل في المنتدى.

على الأجهزة المحمولة، تكون الدردشة ملء الشاشة ويمكن الوصول إليها عبر أيقونة Rocket.Chat في الشريط العلوي:

الإعدادات

يتطلب التكامل إعداده على كلا النظامين. يجب أن تعرف Discourse أين تجد الدردشة لدمجها في واجهة المستخدم، ويجب أن تعرف Rocket.Chat أين تجد Discourse لتتمكن من المصادقة.

جانب Discourse

الإدارة - الإضافات - Discourse RocketChat - الإعدادات

discourse_rocketchat_enabled
تمكين أو تعطيل الإضافة.

discourse rocketchat title
قم بتكوين عنوان نافذة الدردشة هنا، مثل دردشة.

discourse rocketchat host
قم بتكوين اسم المضيف لنسخة Rocket.Chat الخاصة بك، مثل chat.example.com.
لا تضف بادئة مثل https:// أو ما شابه.

discourse rocketchat default channel
قم بتكوين القناة الافتراضية هنا، مثل General.

discourse rocketchat min trust level
قم بتكوين مستوى الثقة الأدنى للمستخدمين لتمكينهم من استخدام Rocket.Chat، مثل 2: member.

discourse rocketchat click entire bar
قم بتمكين هذا الخيار إذا كنت تريد أن يكون شريط العنوان بأكمله قابلًا للنقر لتوسيع الدردشة أو إخفائها. قم بتعطيله إذا كنت تريد فقط أن يكون نص ‘فتح’ و ‘إغلاق’ قابلًا للنقر.

discourse rocketchat show menu for groups
قم بتكوين المجموعات التي تريد أن تعرض فيها Rocket.Chat قائمتها، مثل staff.

جانب Rocket.Chat

الإدارة - الإعدادات - CAS

يستخدم التكامل بروتوكول CAS 2.0 للمصادقة والتفويض.

استبدل forum.example.com باسم منتداك.

  • عنوان URL الأساسي لـ SSO: https://forum.example.com/rocketchat
  • عنوان URL لتسجيل الدخول عبر SSO: https://forum.example.com/rocketchat/login
  • إصدار CAS: 2.0
  • الثقة باسم مستخدم CAS: مفعّل
  • السماح بإنشاء مستخدمين: مفعّل
  • مفعّل: مفعّل

الإدارة - الإعدادات - CAS - معالجة السمات

لتمكين مزامنة عنوان البريد الإلكتروني والاسم الكامل، نحتاج إلى تكوين مكان العثور على هذه السمات.

  • مزامنة بيانات المستخدم دائمًا: مفعّل
  • خريطة السمات: {\"email\":\"%email%\", \"name\":\"%name%\"}

الإدارة - الإعدادات - عام

نحتاج إلى تشغيل Rocket.Chat داخل إطار iframe.

  • تقييد الوصول داخل أي iframe: معطل

الإدارة - الإعدادات - الحسابات

لدمج المنصتين، يجب أن يكون لدى Discourse التحكم في تسجيل الدخول والتسجيل واسم الحساب الكامل والاسم وعنوان البريد الإلكتروني. تحتاج إلى تعطيل الإعدادات التالية على جانب Rocket.Chat:

  • السماح بتغيير صورة المستخدم: معطل
  • السماح بتغيير الاسم: معطل
  • السماح بتغيير اسم المستخدم: معطل
  • السماح بتغيير البريد الإلكتروني: معطل
  • إظهار نموذج تسجيل الدخول الافتراضي: معطل

الإدارة - الإعدادات - الحسابات - التسجيل

  • نموذج التسجيل: معطل
  • عنوان URL السري لنموذج التسجيل: (سلسلة عشوائية)

الإدارة - الإعدادات - الحسابات - الصورة الرمزية

يمكن لـ Rocket.Chat استخدام الصور الرمزية من Discourse.
تأكد من استبدال forum.example.com باسم منتداك.

  • عنوان URL لمزوّد الصور الرمزية الخارجي: https://forum.example.com/rocketchat/avatar/{username}.png
20 إعجابًا

أنا أحد العملاء الذين يعملون مع هذا الإضافة منذ فترة، وهو مذهل!!!

بالمناسبة @RGJ، ربما يمكنك إضافة إلى عنوان الموضوع أنه حل SSO + Embed لدمج RC في مثيل Discourse الحالي الخاص بك.

أي شخص يبحث عن بديل عملي لـ Babble Chat، فهذا هو الكنز الذي تبحث عنه!

9 إعجابات

رائع جداً!

ملاحظة واحدة بخصوص رابط صورة الملف الشخصي: استخدام هذا الرابط لن يعرض صوراً للمستخدمين الذين لديهم صور افتراضية (أحرف على خلفية ملونة)، بل فقط الصور المخصصة أو صور جرافاتار. هل يعرف أحد رابطاً آخر يمكن استخدامه يشمل جميع الصور؟ :slight_smile:

إعجابَين (2)

هذه نقطة جيدة @DiscourseMetrics، شكرًا لك. لم أكن على علم بوجود رابط URL من هذا النوع، لذا قمت بدمجه في الإضافة. يمكنك الآن الحصول على أي صورة رمزية باستخدام https://forum.example.com/rocketchat/avatar/{username}.png، سواء كانت صورة من Gravatar أو صورة مُحمَّلة أو حرفًا.

5 إعجابات

هذا يبدو رائعًا! للأسف، يختفي رأس d الخاص بي عند تمكين هذا، هل لديك أي فكرة عن السبب؟

إعجاب واحد (1)

هههه… أنت تستخدم عددًا هائلاً من مكونات القالب، لذا يصعب تصحيح الأخطاء دون الوصول المباشر.

أرى أنني كنت أستخدم فئة غير محصورة (.collapsible) من المرجح أن تسبب تعارضًا، لذا قمت الآن بحصرها.

إعجابَين (2)

شكرًا لك يا ريتشارد، للأسف لم ينجح ذلك. لقد جربت أيضًا التثبيت على أحد مواقع الأخرى الخاصة بي وقمت بتعطيل جميع الإضافات وـ TCs، ولا يزال الأمر يحدث كما يمكنك رؤية هنا استكشاف التعرض - مناقشات استكشاف التعرض

إعجابَين (2)

لقد أدركت للتو أنني قمت بتطوير واختبار هذه الإضافة فقط على فرع stable. الإضافة ترمي خطأً وتنهار على الإصدار 2.8.x. سأقوم بالتحقيق في الأمر وإصلاحه. شكرًا لك على تقريرك!

@davidkingham لقد أصلحت المشكلة، هل يمكنك إعادة البناء والاختبار مرة أخرى من فضلك؟

4 إعجابات

شكرًا جزيلاً لك على هذا الإضافة، فهي مفيدة للغاية!

لديّ نقطتان فقط:

  • حاليًا، أقوم فقط باختبار جزء تضمين الدردشة من التكامل. هل تتيح وظيفة الدخول الموحد (SSO) في الإضافة تكاملًا سلسًا مع تسجيل الدخول التلقائي، أم لا يزال المستخدم بحاجة إلى النقر على زر تسجيل الدخول الموحد لتسجيل الدخول (دون الحاجة إلى إدخال أي كلمة مرور) إلى Rocket.Chat؟
    حاليًا، أواجه هذه المشكلة مع تكامل الدخول الموحد بين Rocket.Chat وNextCloud، وحتى الآن، لم أتمكن من العثور على طريقة لتسجيل الدخول التلقائي إلى Rocket.Chat دون النقر على زر الدخول الموحد.

  • هل من الممكن إعداد الدردشة المضمنة لتفتح في الصفحة الرئيسية لـ Rocket.Chat وليس في قناة افتراضية؟
    حاليًا، الخيار الوحيد هو تعيين قناة افتراضية، لكن جعل الدردشة المضمنة تفتح أيضًا في الصفحة الرئيسية القابلة للتخصيص لـ Rocket.Chat سيكون مفيدًا للغاية.
    (لقد فتحتُ مشكلة تتعلق بذلك في مستودع GitHub هنا، وآمل ألا يسبب ذلك إزعاجًا لأحد).

شكرًا جزيلاً مرة أخرى على مساهمتك الثمينة!

إعجاب واحد (1)

تُستخدم هذه الحل في phpfox، ويُعرف باسم ChatPlus. من خلاله يمكن نقل جميع رسائل الدردشة القديمة إلى Rocket Chat. هل تخطط لإضافة ميزة مماثلة؟

أي “دردشة قديمة” تشير إليها؟ يبدو هذا أكثر كميزة من ميزات Rocket.Chat بدلاً من ميزة في Discourse؟ أم أنني أساءت فهمك؟

قم بتعيين هذا السكربت كـ “سكربت مخصص للمستخدمين غير المسجلين” في Rocket.Chat (تأكد من استبدال اسم المضيف باسم المنتدى الخاص بك في السطر الثاني). ملاحظة: لم أختبر هذا مؤخرًا. لست متأكدًا مما إذا كان بإمكاني مساعدتك إذا لم يعمل.

const credentialToken = Random.id();
const login_url = "https://discourse.example.com/rocketchat/login";

const appUrl = Meteor.absoluteUrl().replace(/\/$/, '') + __meteor_runtime_config__.ROOT_URL_PATH_PREFIX;
const delim = (login_url.split('?').length > 1) ? '&' : '?';

var i = document.createElement('iframe');
i.style.display = 'none';
i.onload = function() { 
    Accounts.callLoginMethod({
        methodArguments: [{ cas: { credentialToken } }],
    });
};
i.src = `${ login_url }${ delim }service=${ appUrl }`;
document.body.appendChild(i);

سأقوم بالبحث في ذلك خلال بضعة أسابيع. سأبقي مشكلة Github مفتوحة لتذكيري بذلك.

تمتلك phpfox وظيفة لنقل جميع الرسائل القديمة من الدردشة الأصلية إلى Rocket.Chat (ChatPlus). هل من الممكن تنفيذ ذلك في Discourse بحيث يُستخدم Rocket.Chat فقط كدردشة؟ في هذه الحالة، لن تُفقد أي من الرسائل القديمة، ويمكن استخدام هذه الإضافة في المنتديات القديمة التي تحتوي بالفعل على العديد من الرسائل.

لا يدعم Discourse الدردشة بشكل أصلي، إذن من أين ستأتي هذه الرسائل؟
أيضًا، الفكرة الكامنة وراء الدردشة (مقارنةً بالمنتدى) هي أن رسائل الدردشة أكثر عابرة.

إعجاب واحد (1)

أعني الرسائل الخاصة.

آه، فهمت. في هذه الحالة، لا.
لست متأكدًا مما إذا كانت هذه مشكلة حقيقية، حيث أن تفعيل إضافة Rocket.Chat يسمح بذلك حتى عند تعطيل الرسائل الخاصة:

إعجابَين (2)

شكرًا جزيلاً على ردك المفيد جدًا.
لقد رأيت من قبل السكربت الذي نشرته هنا، لكنني اعتقدت أنه صالح فقط للمصادقة عبر CAS وليس للمصادقة عبر SSO. سأجرب ذلك وأتحقق مما إذا كان المتصفح لن يقتل النافذة المخفية أو إذا لم يتم حظرها من قبل المتصفح.

شكرًا جزيلاً! في رأيي، أن تكون قادرًا على تعيين الصفحة الرئيسية افتراضيًا أيضًا في نافذة الدردشة المضمنة سيكون إضافة مثيرة للاهتمام للغاية. أتطلع إلى رؤيتها مطبقة في النهاية، في حال وجدت الموارد لتخصيص بعض الوقت لها. شكرًا لك على النظر في إضافة هذا الخيار.

شكرًا على ردك. هل من الممكن استخدام Mattermost أو MongooseIM للدردشة بدلاً من Rocket.Chat؟ Mattermost مكتوب بلغة Go ويستهلك موارد أقل وهو أكثر قابلية للتوسع. أم أن هذا ممكن فقط مع Rocket.Chat؟

لا، هذه إضافة Rocket.Chat لمنصة Discourse…

تستخدم الإضافة بروتوكول CAS 2.0 لتفعيل وظيفة الدخول الموحد (SSO).

هل من الممكن إعادة تصميم الدردشة لتناسب المنتدى؟ هل يمكن فعل ذلك باستخدام CSS؟ شكرًا.

هل يجيب هذا على سؤالك؟ https://developer.rocket.chat/guides/developer/ui-and-theming

إعجاب واحد (1)