عمل رائع في استنتاج ذلك ![]()
لا أريد أن أقلل من قيمة العمل الذي قمت به، لكن انطباعي الأول هو أنه يجب عليك النظر في استخدام خدمة مصادقة خارجية (مثل 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.