مشكلة في نافذة تسجيل الدخول الاجتماعي (مستخدم جديد) عند فتح /login برمجياً داخل إطار مضمن

مرحبًا،

الخلفية

لقد قمت بإنشاء تطبيق يستخدم واجهة برمجة تطبيقات Discourse وSSO كمزود للهوية.
حاليًا، يتم عرض التطبيق داخل إطار مضمن (iframe)، ولذلك لكي تعمل تسجيل الدخول عبر الشبكات الاجتماعية بشكل صحيح، يجب فتح صفحة /login خارج الإطار في علامة تبويب جديدة للمتصفح.
حتى الآن، كل شيء على ما يرام.

المشكلة

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

بالنسبة للمستخدمين الجدد فقط، يعمل تسجيل الدخول كما هو متوقع.
هل فاتني شيء أم أن هناك سياقًا لا يتعامل معه Discourse بشكل صحيح؟ تقنيًا، يجب أن يكون الأمر نفسه.

إذا كنت ترغب في مشاهدة عرض توضيحي، يرجى إخباري، يمكنني إرسال فيديو سريع عبر الرسائل الخاصة (يظهر معلومات خاصة).

أي مساعدة هي موضع ترحيب!

هل تستخدم أحدث إصدار من Discourse؟

نعم. (عذرًا عن النصوص غير الإنجليزية، فأنا أعمل لعميل يستخدم العبرية)

هل يمكنكم المساعدة في هذا، من فضلكم؟

ولكن لنكون أكثر دقة، تُستخدم التطبيق في امتداد لمتصفح كروم. نحن نستخدم إطارًا مضمنًا (iframe) لأننا لا نملك خيارًا آخر في الوقت الحالي. ومع ذلك، لا زلت غير متأكد من الفرق بين فتح علامة تبويب جديدة في المتصفح برمجيًا من داخل الإطار المضمن للوصول مباشرة إلى /login أو /signup، وبين فتح علامة تبويب يدويًا والنقر على زر تسجيل الدخول/التسجيل.

هل يمكن إصلاح ذلك في نظام Discourse؟

حاليًا، نستخدم Discourse كمزود لتسجيل الدخول الموحد (SSO). هل توجد طرق أخرى؟
وإن وجدت، ما هي أفضل طريقة لتحقيق تسجيل الدخول/التسجيل في هذا السياق؟

كيف قمت بتنفيذ ذلك؟ يبدو أن هناك بعض ملفات تعريف الارتباط أو الجلسات التي تُفقد في مكان ما.

بشكل عام، لا ندعم استخدام Discourse داخل إطار iframe. كما اكتشفت، هناك بعض السلوكيات الغريبة التي قد تسبب مشاكل.

أنا لا أقوم بتضمين Discourse داخل إطار iframe. بل أستخدم واجهة برمجة التطبيقات (API) لعرض رسائل الموضوع.

لا أحاول تسجيل الدخول/إنشاء حساب داخل إطار iframe لأن مواقع التواصل الاجتماعي لا تسمح بعرضها داخلها. لهذا السبب، عندما ينقر المستخدم على زر داخل الـ iframe، يفتح علامة تبويب جديدة في المتصفح إلى صفحة /login في Discourse.

تقنيًا، عند ضغط المستخدم على زر تسجيل الدخول، تفتح علامة تبويب جديدة تحتوي على /session/sso_provider. وسيحتوي return_sso_url على رابط للخلفية (backend) لمعالجة البيانات، وحفظ معلومات جلسة المستخدم، ثم إرسال بعض HTML لإغلاق النافذة تلقائيًا. بعد ذلك، ستكتشف التطبيق أن العملية قد اكتملت وسيتم إعادة تحميله تلقائيًا حتى يتمكن من استخدام جلسة المستخدم المحفوظة.

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

تحرير: إليك عرض توضيحي (لم يكن مخصصًا للنشر، لكن حسنًا، هذه هي أقصر طريقة لإظهار المشكلة وأشعر أنني لم أشرح بشكل كافٍ):
تم حذف الفيديو، ولا يهتم أحد على أي حال
تحرير 2: يبدو أن المشكلة تحدث فقط عند استخدام واجهة برمجة التطبيقات /session/sso_provider؛ وإذا فتحت رابط Discourse مباشرة (لا يزال من داخل إطار iframe)، يبدو أن المشكلة لا تحدث.