مرحباً مرة أخرى! لديّ سؤال. يريد أحد عملائي نقل عضويته تدريجياً من Patreon إلى WordPress (عبر Woocommerce Memberships). أعرف أن هذا ممكن بناءً على منشورات أخرى في المنتدى.
لكن سؤالي هو: إذا قمنا بتفعيل SSO مع WordPress كمزود، فهل ستكون WordPress هي الطريقة الوحيدة لتسجيل الدخول إلى المنتديات؟ هل سيؤدي تفعيل SSO مع WordPress إلى منع مستخدمي Patreon من تسجيل الدخول عبر حساباتهم في Patreon؟ أم أنه من الممكن تشغيلهما معاً؟
أعتذر إذا كان هذا مربكاً أو إذا كان هذا ليس المكان المناسب لطرح هذا السؤال.
يمكنك أيضًا السماح للمستخدمين بتسجيل الدخول إلى موقع WordPress الخاص بك عبر Patreon باستخدام Patreon WordPress – WordPress plugin | WordPress.org. لم أجرب ذلك، لكن يجب أن يكون من الممكن السماح للمستخدمين بتسجيل الدخول إلى WordPress عبر Patreon مع الحفاظ على تسجيل الدخول الموحد (SSO) بين WordPress وDiscourse. إذا جربت ذلك وواجهت أي مشاكل في جعله يعمل، فيرجى إبلاغنا بذلك.
مرحبًا! لقد جربت هذا الإعداد وهو يعمل بشكل أساسي!
المشكلة الوحيدة التي وجدتها هي أنه لا يعيد توجيه المستخدم إلى Discourse بعد تسجيل الدخول الناجح - بل يعيده إلى ووردبريس. يجب على المستخدم الانتقال يدويًا إلى Discourse ثم الضغط على زر “تسجيل الدخول” مرة أخرى للتسجيل. أتساءل عما إذا كان يمكن إصلاح ذلك بطريقة ما؟
شكرًا لك على تجربتك. يبدو أن معلمات SSO المطلوبة لتسجيل دخول المستخدم إلى Discourse تُحذف أثناء عملية تسجيل الدخول إلى Patreon. إذا كان الأمر كذلك، فربما لا يكون هناك أي شيء يمكن فعله لإصلاح المشكلة.
إذا كان سبب المشكلة هو ما أظنه، فإن تعديل إضافة WordPress Patreon قد يحل المشكلة. ما أعتقد أنه يسبب المشكلة هو أن إضافة WordPress Patreon تقوم بإزالة معلمات الاستعلام sso و sig المرسلة مع طلب تسجيل الدخول من Patreon. قد يكون من الجيد التواصل مع مطوري هذه الإضافة بشأن المشكلة.
قبل القيام بذلك، يجب عليك التأكد من أن النقر على زر تسجيل الدخول في Discourse، لمستخدم غير مسجل حاليًا في WordPress، ينقل المستخدم إلى صفحة تسجيل الدخول في WordPress. إذا اختار المستخدم بعد ذلك خيار تسجيل الدخول عبر Patreon، فسيتم تسجيله في WordPress ولكن ليس في Discourse. لاحظ أنه إذا كانت موقع Discourse الخاص بك مضبوطًا ليكون خاصًا، فإن ما سبق يحدث إذا تصفح المستخدم موقع Discourse الخاص بك مباشرة. في هذه الحالة، لن يرى المستخدم زر تسجيل الدخول في Discourse.
حسناً، لقد وجدت حلاً بديلاً يُصلح مشكلة تسجيل الدخول عبر Patreon. يرجى الاطلاع على التعليمات أدناه.
ستحتاج إلى:
أي إضافة توفر اختصارًا قصيرًا لعرض نموذج تسجيل الدخول (لقد قمت بتثبيت إضافة WooCommerce على موقعي، لذا استخدمت الاختصار القصير [woocommerce_my_account]، الذي يقوم بذلك بالضبط للمستخدمين غير المسجلين).
إضافة Members، التي توفر الاختصارات القصيرة [members_logged_in] و [members_not_logged_in] لإخفاء/إظهار المحتوى بناءً على ما إذا كان المستخدم مسجلاً للدخول أم لا. يمكنك استخدام أي إضافة أخرى توفر وظيفة مماثلة للاختصارات القصيرة.
الفكرة هي إنشاء صفحة خاصة تعرض نموذج تسجيل الدخول (وزر تسجيل الدخول عبر Patreon) للمستخدمين غير المسجلين. أما إذا كان المستخدم مسجلاً للدخول، فيجب إعادة توجيهه إلى عنوان URL التالي: https://community.morevnaproject.org/session/sso?return_path=%2F.
(بالتأكيد، ستريد استبدال “community.morevnaproject.org” بنطاقك الخاص).
تحتوي صفحتي الخاصة لتسجيل الدخول على المحتوى التالي:
عندما يضغط المستخدم على زر “تسجيل الدخول” في Discourse، يتم إعادة توجيهه إلى صفحة WordPress الخاصة بي. وبما أن المستخدم غير مسجل للدخول، يتم عرض نموذج تسجيل الدخول. إذا ضغط المستخدم على زر “تسجيل الدخول عبر Patreon”، فسيتم إعادة توجيهه إلى Patreon للحصول على التفويض. بعد التفويض الناجح، يتم إعادة توجيهه مرة أخرى إلى صفحتي الخاصة. وبما أن المستخدم مسجل الآن في الدخول، يتم تفعيل اختصار “redirect” القصير:
لا أريد أن أقلل من قيمة العمل الذي قمت به، لكن انطباعي الأول هو أنه يجب عليك النظر في استخدام خدمة مصادقة خارجية (مثل 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 كالتالي:
بشكل أساسي، الكود مُعد بالفعل جزئيًا للتعامل مع final_redirect_uri مخصص. يمكنني فهم سبب عدم رغبة مطوري إضافة Patreon لـ Wordpress في إضافتها، ولكن إذا شعرت أنك واثق بما يكفي من وصف ما وصفته هنا، فقد يستحق الأمر إنشاء مشكلة في مستودعهم على GitHub. وإذا فشل ذلك، يمكنك استخدام الدالة التي أشرت إليها أعلاه لتوليد رابط بنفسك وإنشاء زر خاص بك (أو توظيف مطور Wordpress للقيام بذلك).
ملاحظة صغيرة حول بناء عنوان URL الخاص بـ sso، فمن الأوضح استخدام
الجزء الأخير، return_path، هو المسار الذي يُوجَّه إليه المستخدم في Discourse بعد تسجيل الدخول. إذا كان / فسيتم توجيهه إلى الصفحة الرئيسية للمنتدى. لمزيد من المعلومات حول بناء عناوين URL الخاصة بـ SSO، راجع WP Discourse Tips and Tricks.
واو، شكرًا جزيلاً لك على التعليمات المفصلة! إذن، من المنطقي تعديل اختصار [patreon_login_button] لقبول معلمة final_redirect_uri، وتقديم طلب سحب (PR) إلى مستودعهم على GitHub. شكرًا مرة أخرى على وقتك في الشرح!