تسجيل الدخول عبر WordPress SSO و Patreon

مرحباً مرة أخرى! لديّ سؤال. يريد أحد عملائي نقل عضويته تدريجياً من Patreon إلى WordPress (عبر Woocommerce Memberships). أعرف أن هذا ممكن بناءً على منشورات أخرى في المنتدى.

لكن سؤالي هو: إذا قمنا بتفعيل SSO مع WordPress كمزود، فهل ستكون WordPress هي الطريقة الوحيدة لتسجيل الدخول إلى المنتديات؟ هل سيؤدي تفعيل SSO مع WordPress إلى منع مستخدمي Patreon من تسجيل الدخول عبر حساباتهم في Patreon؟ أم أنه من الممكن تشغيلهما معاً؟

أعتذر إذا كان هذا مربكاً أو إذا كان هذا ليس المكان المناسب لطرح هذا السؤال.

شكراً مقدماً!

نعم، الحرف S الأول في SSO يعني Single. تصبح ووردبريس المصدر الموثوق لجميع عمليات المصادقة.

ومع ذلك، إذا كانت باتريون توفر عناوين البريد الإلكتروني للمستخدمين، فيمكنهم التسجيل في ووردبريس للعودة إلى حساباتهم بشرط استخدام نفس العنوان.

يمكنك أيضًا السماح للمستخدمين بتسجيل الدخول إلى موقع WordPress الخاص بك عبر Patreon باستخدام Patreon WordPress – WordPress plugin | WordPress.org. لم أجرب ذلك، لكن يجب أن يكون من الممكن السماح للمستخدمين بتسجيل الدخول إلى WordPress عبر Patreon مع الحفاظ على تسجيل الدخول الموحد (SSO) بين WordPress وDiscourse. إذا جربت ذلك وواجهت أي مشاكل في جعله يعمل، فيرجى إبلاغنا بذلك.

مرحبًا! لقد جربت هذا الإعداد وهو يعمل بشكل أساسي! :slight_smile:
المشكلة الوحيدة التي وجدتها هي أنه لا يعيد توجيه المستخدم إلى Discourse بعد تسجيل الدخول الناجح - بل يعيده إلى ووردبريس. يجب على المستخدم الانتقال يدويًا إلى Discourse ثم الضغط على زر “تسجيل الدخول” مرة أخرى للتسجيل. أتساءل عما إذا كان يمكن إصلاح ذلك بطريقة ما؟

لقد سجلت فيديو يوضح كيفية عمله -

شكرًا لك على تجربتك. يبدو أن معلمات SSO المطلوبة لتسجيل دخول المستخدم إلى Discourse تُحذف أثناء عملية تسجيل الدخول إلى Patreon. إذا كان الأمر كذلك، فربما لا يكون هناك أي شيء يمكن فعله لإصلاح المشكلة.

أتساءل، هل يمكن إصلاح ذلك عن طريق تعديل إضافة ووردبريس-باتريون؟ هل يستحق الأمر التواصل مع مؤلفيها؟ :slight_smile:

إذا كان سبب المشكلة هو ما أظنه، فإن تعديل إضافة WordPress Patreon قد يحل المشكلة. ما أعتقد أنه يسبب المشكلة هو أن إضافة WordPress Patreon تقوم بإزالة معلمات الاستعلام sso و sig المرسلة مع طلب تسجيل الدخول من Patreon. قد يكون من الجيد التواصل مع مطوري هذه الإضافة بشأن المشكلة.

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

مرحبًا! لقد قدمت تقريرًا إلى مطوري إضافة Patreon - Redirecting not working when using together with Discourse SSO - Wordpress Plugin - Patreon Developers

نعم، يمكنني تأكيد ذلك:

  • النقر على زر تسجيل الدخول في Discourse، لمستخدم غير مسجل حاليًا في WordPress ينقل المستخدم إلى صفحة تسجيل الدخول في WordPress - :white_check_mark: نعم

  • إذا اختار المستخدم بعد ذلك خيار تسجيل الدخول عبر Patreon، فسوف يتم تسجيله في WordPress - :white_check_mark: نعم

  • لكنه لن يتم تسجيله في Discourse - :white_check_mark: نعم - كما يظهر في الفيديو أعلاه عند 0:32، أن المستخدم غير مسجل الدخول.

حسناً، لقد وجدت حلاً بديلاً يُصلح مشكلة تسجيل الدخول عبر Patreon. يرجى الاطلاع على التعليمات أدناه. :slight_smile:

ستحتاج إلى:

  • أي إضافة توفر اختصارًا قصيرًا لعرض نموذج تسجيل الدخول (لقد قمت بتثبيت إضافة WooCommerce على موقعي، لذا استخدمت الاختصار القصير [woocommerce_my_account]، الذي يقوم بذلك بالضبط للمستخدمين غير المسجلين).
  • إضافة Members، التي توفر الاختصارات القصيرة [members_logged_in] و [members_not_logged_in] لإخفاء/إظهار المحتوى بناءً على ما إذا كان المستخدم مسجلاً للدخول أم لا. يمكنك استخدام أي إضافة أخرى توفر وظيفة مماثلة للاختصارات القصيرة.
  • إضافة Shortcode Redirect.

الفكرة هي إنشاء صفحة خاصة تعرض نموذج تسجيل الدخول (وزر تسجيل الدخول عبر Patreon) للمستخدمين غير المسجلين. أما إذا كان المستخدم مسجلاً للدخول، فيجب إعادة توجيهه إلى عنوان URL التالي: https://community.morevnaproject.org/session/sso?return_path=%2F.
(بالتأكيد، ستريد استبدال “community.morevnaproject.org” بنطاقك الخاص).

تحتوي صفحتي الخاصة لتسجيل الدخول على المحتوى التالي:

[members_not_logged_in]
   [woocommerce_my_account]
   [patreon_login_button]
[/members_not_logged_in]
[members_logged_in]
   [redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']
[/members_logged_in]

(يمكنك مشاهدته يعمل هنا - Log In / Register — Morevna Project)

بعد ذلك، كل ما عليك فعله هو تكوين إضافة WP-Discourse لاستخدام تلك الصفحة في عملية SSO -

عندما يضغط المستخدم على زر “تسجيل الدخول” في Discourse، يتم إعادة توجيهه إلى صفحة WordPress الخاصة بي. وبما أن المستخدم غير مسجل للدخول، يتم عرض نموذج تسجيل الدخول. إذا ضغط المستخدم على زر “تسجيل الدخول عبر Patreon”، فسيتم إعادة توجيهه إلى Patreon للحصول على التفويض. بعد التفويض الناجح، يتم إعادة توجيهه مرة أخرى إلى صفحتي الخاصة. وبما أن المستخدم مسجل الآن في الدخول، يتم تفعيل اختصار “redirect” القصير:

[redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']

… ويتم إعادة توجيه المستخدم بنجاح إلى منتديات Discourse.

الجزء session/sso?return_path=%2F في نهاية عنوان URL مطلوب، وإلا لن يتعرف Discourse على المستخدم كمسجل في الدخول بعد إعادة التوجيه.

هذا كل شيء! آمل أن يساعد هذا المستخدمين الآخرين الذين يريدون استخدام SSO الخاص بـ WordPress مع تسجيل الدخول عبر Patreon على مواقعهم الإلكترونية. :slight_smile:

عمل رائع في استنتاج ذلك :+1:

لا أريد أن أقلل من قيمة العمل الذي قمت به، لكن انطباعي الأول هو أنه يجب عليك النظر في استخدام خدمة مصادقة خارجية (مثل okta.com أو auth0.com) في هذه المرحلة. كلما وصلت إلى نقطة ربط ثلاث خدمات مختلفة (مثل Patreon وWordpress وDiscourse) لتحقيق مصادقة واحدة في خطوة واحدة، كان ذلك مؤشرًا على أنه يجب عليك النظر في حل مخصص للمصادقة. سواء كنت قادرًا على تحقيق ذلك بطريقة ما أم لا، فهناك خطر معقول على المدى الطويل من أن حلّك قد ينهار أو لا يعمل في جميع الحالات.

إذا كنت لا تزال ترغب في المضي قدمًا في هذا المسار، ف لدي بعض الاقتراحات، ولكن مع تحذير عادل بأن هذا سيصبح تقنيًا بعض الشيء. أنا أضيف هذه المعلومات جزئيًا في حال صادفها شخص آخر ويرغب في المضي قدمًا في هذا الاتجاه.

لقد ألقيت نظرة سريعة على كود إضافة Patreon لـ Wordpress ويبدو أن تدفق OAuth الخاص بهم يقبل مفتاح/قيمة final_redirect_uri في معلمة state، مما يسمح لك بالانتقال مباشرة من مصادقة Patreon إلى SSO الخاص بـ Discourse، مما يلغي الحاجة إلى كل من إضافتي Members وRedirect المذكورتين أعلاه، ويتجاوز أي مشاكل قد تنشأ مع هذا النهج.

العديد من خدمات المصادقة لديها نسخة من معلمة final_redirect_uri، أي معلمة تسمح لك بتغيير الوجهة التي يُوجَّه إليها المستخدم بعد المصادقة. إذا كنت تقرأ هذا لأنك تحاول حل نفس المشكلة ولكن مع خدمة مختلفة (أي غير Patreon)، وقد قررت أيضًا أن تحذيري من ربط ثلاث خدمات مختلفة لا ينطبق في حالتك، فإن هذا هو المكان الذي يجب أن تبحث فيه.

هذا يعني أنك تريد أن تقبل الاختصار المختصر (shortcode) الذي يولد زر تسجيل الدخول إلى Patreon final_redirect_uri كحجة، والتي سيتم تمريرها بعد ذلك إلى عنوان URL تسجيل الدخول النهائي الذي تستخدمه Patreon. بالنظر إلى كود إضافة Patreon لـ Wordpress، فإن هذا ممكن عمليًا. لإعطائك فكرة، تبدو الدالة ذات الصلة التي تولد عنوان URL الخاص بـ Patreon كالتالي:

Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );

بشكل أساسي، الكود مُعد بالفعل جزئيًا للتعامل مع final_redirect_uri مخصص. يمكنني فهم سبب عدم رغبة مطوري إضافة Patreon لـ Wordpress في إضافتها، ولكن إذا شعرت أنك واثق بما يكفي من وصف ما وصفته هنا، فقد يستحق الأمر إنشاء مشكلة في مستودعهم على GitHub. وإذا فشل ذلك، يمكنك استخدام الدالة التي أشرت إليها أعلاه لتوليد رابط بنفسك وإنشاء زر خاص بك (أو توظيف مطور Wordpress للقيام بذلك).

ملاحظة صغيرة حول بناء عنوان URL الخاص بـ sso، فمن الأوضح استخدام

https://discourse.example.com/session/sso?return_path=/

بدلاً من

https://discourse.example.com/session/sso?return_path=%2F

الجزء الأخير، return_path، هو المسار الذي يُوجَّه إليه المستخدم في Discourse بعد تسجيل الدخول. إذا كان / فسيتم توجيهه إلى الصفحة الرئيسية للمنتدى. لمزيد من المعلومات حول بناء عناوين URL الخاصة بـ SSO، راجع WP Discourse Tips and Tricks.

+1 نعم، هناك خطر! :slight_smile:

واو، شكرًا جزيلاً لك على التعليمات المفصلة! إذن، من المنطقي تعديل اختصار [patreon_login_button] لقبول معلمة final_redirect_uri، وتقديم طلب سحب (PR) إلى مستودعهم على GitHub. شكرًا مرة أخرى على وقتك في الشرح!