أوه، عذرًا - كنت متأكدًا من أنني أجبت على ذلك من قبل ولكن أعتقد… لم أفعل؟ ربما فكرت في الأمر فقط! على أي حال:
تتم مزامنة البريد الإلكتروني مبدئيًا من SSO لكل من WordPress و Discourse. ومع ذلك، بناءً على الطلب الشائع، نسمح للأشخاص بتغيير هذا البريد الإلكتروني على Discourse. (تبين أنه من الشائع الرغبة في إرسال إشعارات Discourse إلى مكان آخر غير البريد الإلكتروني المرتبط مباشرة بتسجيل الدخول.) من الممكن أيضًا تغيير عنوان البريد الإلكتروني على WordPress، لكنني لا أعرف أي شخص يفعل ذلك، أو حتى ما إذا كان البريد الإلكتروني الصادر على تلك النسخة يعمل.
بـ “معرف المستخدم”، قصدت “اسم المستخدم”. اسم المستخدم مأخوذ دائمًا [1] من SSO لكل من Discourse و WordPress ولا يمكن للمستخدم تغييره في أي من الحالتين. لسبب غير معروف لي ولكنه ربما كان منطقيًا في ذلك الوقت، هذا هو nickname على جانب SSO الخاص بنا؛ يتم تعيين هذا إلى oauth2 json username path.
في الواقع، تبين أن هناك عددًا قليلاً من الحسابات مثل حسابي والتي تم إعدادها قبل أن يكون لدينا SSO، وهي خاطئة - أنا “Matthew Miller” بدلاً من mattdm. ولكن يمكننا تنظيف ذلك. ↩︎
سيكون هناك مجموعة فرعية من المستخدمين لديك بعناوين بريد إلكتروني مختلفة على ووردبريس وديسكورس.
اسم المستخدم الخاص بك مضمون ليكون هو نفسه كما هو مقدم من مزود الهوية الخاص بك لكل من ووردبريس وديسكورس.
إذا قمنا بفصل خطاف مستخدم ووردبريس-ديسكورس عن وظيفة DiscourseConnect (وهو أمر ممكن)، فسيحدث مطابقة المستخدم على أساس البريد الإلكتروني، وليس اسم المستخدم. وضعك خاص إلى حد ما بإعداد الهوية الخاص بك.
أعتقد أن هذه الحالة يتم التعامل معها بشكل أفضل من خلال رمز مخصص على ووردبريس الخاص بك. ما تريده هو شيء مثل هذا:
بشكل أساسي، قم فقط بتعيين حقل البيانات الوصفية discourse_username كاسم مستخدم ووردبريس بعد تسجيل الدخول، حيث من المضمون أن يكونا متماثلين. لاحظ أن “user_login” هو ما يسمى أحيانًا “اسم المستخدم” في كود ووردبريس.
في وقت ما على طول الطريق، قمنا بالتغيير بحيث تتم مزامنة عناوين البريد الإلكتروني بالقوة من نظام تسجيل الدخول الأحادي (oauth2) الخاص بنا. لذا، يجب أن نكون قادرين على المطابقة بهذه الطريقة. (وحتى لو كان هناك سبب لعدم التطابق، فلا ينبغي أن يكون هناك حالة ينتمي فيها بريد إلكتروني إلى شخص آخر، لذا في أسوأ الأحوال سيفشل ذلك، أليس كذلك؟)
هل هناك أي فرصة لجعل خطاف مستخدم ووردبريس-ديسكورس يعمل ببساطة؟
إذا فشل ذلك… أنا لست خبيراً في ووردبريس، وووردبريس الخاص بنا مستضاف، لذلك لست متأكداً من أن لدينا خياراً سهلاً لتخصيص المكون الإضافي.
علاوة على ذلك ، أنت تطلب ميزة جديدة يجب النظر فيها بعناية. أعرف أنني قلت إنها ممكنة قبل بضع سنوات ، ومع ذلك ، أنا حاليًا حذر قليلاً من القيام بذلك كميزة أساسية للمكون الإضافي ، حيث سيتعين على مثل هذه الميزة افتراض أن عناوين البريد الإلكتروني تم التحقق منها بشكل صحيح على ووردبريس ، وهو ليس افتراضًا آمنًا بالضرورة.
هذا (التحقق من صحة البريد الإلكتروني في ووردبريس) هو مسؤولية مسؤول الموقع ، ومع ذلك فإن مبدأ تطوير المصادر المفتوحة هو تجنب إنشاء شيء سيؤدي إلى نتائج سيئة في مجموعة فرعية (حتى مجموعة صغيرة) من الحالات ، بافتراض أنه ليس لديك سيطرة على البيئة. لا تزال هذه المشكلة قائمة ، ولكنها مخففة ، عندما تقتصر فقط على DiscourseConnect.
سأفكر في الأمر عن كثب وسأعود إليك في وقت لاحق من هذا الأسبوع.
إذا كان مطابقة البريد الإلكتروني معقدًا للغاية، فأعتقد أن “أسماء مستخدمي Discourse تتطابق دائمًا مع WordPress (والعكس صحيح)” لا يمكن أن تكون نادرة للغاية.
حتى لو لم يكن لدى شخص ما نظام تسجيل دخول موحد يفترض اسم مستخدم فريدًا، فمن المؤكد أنه يجب أن تكون هناك العديد من المواقع الصغيرة التي تحتوي، على سبيل المثال، على عشرات من مستخدمي WordPress حيث يكون هذا صحيحًا بالاتفاق.
هناك حل قائم لهذا النوع من المشاكل. يمكن تكوين Discourse ليكون موفر DiscourseConnect لـ WordPress (العكس من التكوين المعتاد). من السهل إعداده. عند تمكينه، يوجد إعداد اختياري يسمح بمزامنة حسابات WordPress/Discourse بناءً على عنوان البريد الإلكتروني للمستخدم.
حتى أن هناك رابطًا مضافًا إلى صفحة ملف تعريف المستخدم:
(تعديل: هل يمكن إضافة تسمية توضيحية للصورة بدون الذكاء الاصطناعي؟)
اختبار ذلك الآن، النقر على الرابط في صفحة الملف الشخصي لا يملأ حقل اسم مستخدم Discourse. يجب أن يفعل ذلك. النقر على رابط “تسجيل الدخول باستخدام Discourse” الذي يمكن إضافته إلى صفحة تسجيل الدخول يؤدي إلى تحديث حقل اسم مستخدم Discourse تلقائيًا.
أعتقد أن الهدف من مزامنة الحسابات هو تحديث حقل اسم مستخدم Discourse بطريقة آمنة، لذلك ربما يجدر النظر في ما يحدث مع هذا. يبدو أيضًا أن هناك مشكلة حيث يُسمح للحسابات التي لديها عنوان بريد إلكتروني “غير متحقق منه” على WordPress بمزامنة حساباتها مع Discourse. لا ينبغي السماح بذلك افتراضيًا.
بالنسبة لحالتك، قد لا ترغب في السماح للمستخدمين بتسجيل الدخول إلى WordPress عبر Discourse. يجب أن يكون من الممكن فقط استخدام الرابط الموجود في صفحة الملف الشخصي للسماح للمستخدمين بمزامنة حساباتهم بحيث يتم ملء حقل اسم مستخدم Discourse الخاص بهم تلقائيًا. لا يتعين عليك تمكين تسجيل الدخول إلى WordPress عبر Discourse لكي يعمل هذا.
أحد العيوب المحتملة لهذا النهج هو أن المستخدمين سيضطرون إلى بدء تشغيله. لن يوفر زرًا يمكن للمسؤولين النقر عليه للحصول على اسم مستخدم Discourse الخاص بالمستخدم.
هذا يبدو سخيفًا. لدينا بالفعل نظام تسجيل دخول موحد مركزي. لا ينبغي لنا أن نضطر إلى تكوين بعض خدماتنا لاستخدام خدمات عشوائية أخرى كموفر للمصادقة فقط لجعلها تعمل معًا. هذا طريق إلى الجنون.
لا تنخدع بالاسم (DiscourseConnect). إذا كانت الميزة التي وصفتها تعمل كما ينبغي، فستكون مجرد طريقة لمستخدم WordPress لتأكيد أن لديه حساب Discourse بعنوان بريد إلكتروني مطابق والحصول على اسم مستخدم Discourse الخاص به مملوءًا تلقائيًا في WordPress. لن يؤثر ذلك على نظام المصادقة الخاص بموقعك.
لن تكون هناك آلية مطابقة لاسم مستخدم Wordpress باسم مستخدم Discourse في المكون الإضافي الأساسي، حتى خلف إعداد. الاحتمال الوحيد في هذا السياق هو مطابقة البريد الإلكتروني. لقد قررت إضافة مطابقة البريد الإلكتروني كآلية احتياطية لـ webhook المستخدم. ستكون في الإصدار التالي، والذي سيأتي في غضون أسابيع قليلة.
لإغلاق هذه الدائرة، تضمنت أحدث نسخة من المكون الإضافي 2.5.4 تحديثات مختلفة لـ Webhooks، بما في ذلك إزالة متطلب DiscourseConnect لإعداد “مطابقة المستخدمين حسب البريد الإلكتروني”. انظر المزيد