اجعل Discourse يتعرف على الحسابات الموثقة في WordPress (و WooCommerce) من أجل SSO

متابعة للنقاش من كيفية إيقاف التحقق من البريد الإلكتروني في Discourse؟:

لا يتعرف Discourse على حساباتنا المُتحقَّق منها. إليك بعض السياق حول إعداد موقعنا الحالي:

أستخدم إضافة WP Discourse مع WordPress كمزوّد لـ SSO

إعدادات SSO الحالية <img>

أستخدم حاليًا WooCommerce (WC) لإدارة تسجيلات المستخدمين الجدد، هنا: https://pickleballist.com/my-account

أستخدم إضافة تسمى Booster for WC، والتي تضيف وظائف إضافية إلى WooCommerce، بما في ذلك إمكانية اشتراط التحقق من البريد الإلكتروني قبل أن يتمكن المستخدم من الوصول إلى حسابه.

خيارات الإضافة <img>

رسالة التحقق المستلمة <img>

بعد أن ينقر المستخدم على الرابط في رسالة تفعيل حسابه، يتم نقله إلى صفحة /my-account/ في WordPress. إذا حاول شخص تسجيل الدخول باستخدام بيانات التسجيل الخاصة به دون النقر على رابط التحقق، يتم إخباره بأن حسابه يحتاج أولاً إلى التحقق، ويتم تزويده برابط يمكنه النقر عليه لـ “إعادة إرسال رسالة التحقق”.

إذا زرت صفحة “المستخدمين” في لوحة تحكم المسؤول، يمكنك بسهولة رؤية من تم التحقق من حساباته ومن لم يتم ذلك.

حسابات المستخدمين مع توضيح التحقق <img>

للأسف، بعد أن يتحقق المستخدم من بريده الإلكتروني ثم يحاول زيارة منتدياتنا على https://forums.pickleballist.com، لا يتم تسجيل دخوله تلقائيًا. :disappointed_face: ولكن أسوأ جزء هو أنه عند النقر على زر “تسجيل الدخول” في المنتديات، يُطلب منه التحقق من بريده الإلكتروني والنقر على رابط رسالة Discourse “أكد حسابك الجديد”.

هل هناك طريقة لجعل Discourse يتحقق من من هو مُتحقَّق فعليًا بناءً على البيانات الوصفية المستلمة من WooCommerce؟

أعتقد أن وحدة “التحقق من البريد الإلكتروني” هذه لا تتفاعل مع wp_new_user_notification، وإلا لكان Discourse قد رآها، أليس كذلك؟ هل يمكننا جعل Discourse يبحث عن خطاف آخر؟

نتطلع إلى أي رؤى هنا!

@simon لقد لاحظت للتو تعليقك هنا:

هل استخدام مقتطف الكود :up_arrow:︎ المذكور هو الحل لما أحاول تحقيقه؟

طالما أن إضافة Booster for WC تمنع المستخدمين من تسجيل الدخول إلى WordPress قبل التحقق من عنوان بريدهم الإلكتروني، فإن هذا الكود آمن للاستخدام. عند إضافته إلى قالبك أو إلى إضافة، سيسمح للمستخدمين بتسجيل الدخول إلى موقع Discourse دون الحاجة إلى إعادة التحقق من عنوان بريدهم الإلكتروني.

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

add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
    if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
        $require_activation = false;
    }

    return $require_activation;
}

إذا كنت تواجه أي مشاكل في إعادة توجيه تسجيل الدخول عبر SSO مع WooCommerce، فقد تحتاج إلى تثبيت هذه الإضافة على موقعك: GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. اطلع على ملف readme الخاص بالإضافة للحصول على تفاصيل حول ما تفعله.

هذا الكود نجح! لم يعد على المستخدمين الآن سوى النقر على رابط التحقق الذي يولده ووردبريس. :folded_hands: شكرًا لك!

لقد أضفت هذا للتو، لكن عندما يضغط المستخدم على رابط التحقق الذي يولده ووردبريس، يتم توجيهه ببساطة إلى صفحة /my-account في ووردبريس بعد التحقق. لا يتم إعادته إلى منتديات Discourse. ما هو السلوك المتوقع هنا؟

أعتقد أن رابط التحقق يتم إنشاؤه بواسطة إضافة Booster for WC. إذا كان الأمر كذلك، فهذا شيء لم أختبره. المشكلة التي تهدف إضافة wp-discourse-woocommerce-support إلى حلها هي تجاوز إعادة توجيه تسجيل الدخول التي يحددها WooCommerce في كل محاولة تسجيل دخول. لم أختبرها مع WooCommerce مؤخرًا، لكن في الماضي، عندما يتم تثبيت WooCommerce على موقع، كان يمنع المستخدمين غير المسجلين من إعادة التوجيه إلى Discourse عند محاولة تسجيل الدخول عبر WordPress.

السلوك المتوقع هو أنه عندما ينقر مستخدم غير مسجل في WordPress إما على زر تسجيل الدخول في Discourse، أو على رابط تسجيل الدخول SSO الذي تم إنشاؤه أسفل منشور تم نشره في Discourse، سيتم توجيه المستخدم عبر عملية تسجيل الدخول في WordPress ثم إعادة توجيهه إلى عنوان URL الصحيح في Discourse. أخبرني إذا لم يكن هذا يعمل بشكل صحيح للمستخدمين الذين قاموا بالتحقق من عناوين بريدهم الإلكتروني.

قد يكون من الممكن جعل هذا يعمل مع رابط التحقق الذي ينقر عليه مستخدموك، لكنني أعتقد أن هذه قضية منفصلة.