تسجيل الدخول الاجتماعي يعمل فقط على سطح المكتب، ولكن ليس على الأجهزة المحمولة (تم اكتشاف CSRF)

مرحباً،
يواجه منتدى Discourse الخاص بي مشكلة في تسجيل الدخول الاجتماعي (Google، Discord، LinkedIn):

  • على أجهزة سطح المكتب، تعمل جميع عمليات تسجيل الدخول الاجتماعية بشكل صحيح.

  • على جميع الأجهزة المحمولة (iOS/Android، Safari/Chrome/Firefox)، تفشل.

سير العملية على الهاتف المحمول:

  1. يتم فتح تسجيل الدخول الاجتماعي بشكل طبيعي.

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

في السجلات، تظهر في كل مرة:

(google_oauth2) Authentication failure! csrf_detected

أو

(discord) Authentication failure! invalid_credentials: invalid_request

ما قمت بالتحقق منه بالفعل:

  • إعداد OAuth صحيح (سطح المكتب يعمل)

  • مسح ملفات تعريف الارتباط/الذاكرة المؤقتة على الأجهزة

  • لا توجد متصفحات داخل التطبيق، تم اختبار المتصفحات الحقيقية

  • بغض النظر عن متصفح الهاتف المحمول → دائمًا ما يتم اكتشاف CSRF

السؤال:
ما الذي يمكن أن يسبب في Discourse فقدان الجلسة/ملفات تعريف الارتباط على الأجهزة المحمولة فقط ويتسبب في فشل عملية تسجيل الدخول مع ظهور csrf_detected؟

شكراً جزيلاً على أي مساعدة! :folded_hands:


هل هذا تثبيت قياسي؟ إذا لم يكن كذلك، فهل لديك تمكين force_https؟

مرحباً، نعم إنها تثبيت Discourse قياسي (مثبت على خادم Hetzner).

لقد وجدت الحل للمشكلة التي كانت تتسبب في فشل تسجيل الدخول الاجتماعي (Google، Discord، إلخ) على الأجهزة المحمولة مع ظهور csrf_detected، على الرغم من عملها على أجهزة الكمبيوتر.

كان السبب يكمن في القالب (Theme) الخاص بي:

كان نص JavaScript مخصص في قسم \u003chead\u003e في القالب يقوم بإعادة تحميل الصفحة باستمرار (window.location.replace) على الأجهزة المحمولة.

هذا التحويل القسري أدى إلى تدمير رمز CSRF المؤقت الضروري للتحقق من الجلسة بعد عودة الاتصال من Google/Discord.

الحل:

قمت بإزالة النص البرمجي بالكامل الذي كان يفرض العرض الخاص بالهاتف المحمول من القالب.

إذا كنتم تواجهون مشاكل مماثلة وتستخدمون قالبًا مخصصًا، فتحققوا مما إذا كانت هناك نصوص برمجية تعمل وتتسبب في عمليات إعادة توجيه. كان هذا هو الجاني في حالتي!