خطأ في مصادقة جوجل

مرحبًا،

أنا جديد في منصة Discourse. لقد أنشأت منتدى مؤخرًا وأعمل الآن على نقل الموقع والمنتدى إلى اسم نطاق جديد.

النطاق القديم للمنتدى: https://forum.skymail.app (غير نشط، ويعيد التوجيه إلى الموقع الجديد)

النطاق الجديد: https://forum.sugarmail.app (يعمل بشكل صحيح)

أواجه مشكلة مع مصادقة Google. لدي مشروع في Google Cloud، وبعد التبديل إلى النطاق الجديد، قمت أيضًا بتغيير رابط إعادة التوجيه تحت معرف العميل (Client ID) هناك، لذا فهو مضبوط حاليًا على:

https://forum.sugarmail.app/auth/google_oauth2/callback

والآن المشكلة. عند محاولة “التسجيل عبر Google”، أواجه هذه الرسالة في Discourse:

https://forum.sugarmail.app/auth/failure?message=csrf_detected انتهت مهلة التفويض، أو أنك قمت بالتبديل إلى متصفح آخر. يرجى المحاولة مرة أخرى.

عندما كان المنتدى تحت النطاق القديم forum.skymail.app، كانت مصادقة Google تعمل دون أي مشاكل.

لقد قمت بتشغيل الأمر ./launcher rebuild app بعد تغيير النطاق، مع التأكد من تحديث النطاق في ملف app.yaml تحت DISCOURSE_HOSTNAME (في الواقع، لم يكن المنتدى يعمل على الإطلاق حتى قمت بذلك).

هل يمكنكم تقديم أي توجيهات؟

إعجاب واحد (1)

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

هل لديك أي إضافات أو وكلاء قد يتدخلون في ملفات تعريف الارتباط في موقعك؟

إعجابَين (2)

شكرًا لك على الرد.

الإضافات - لا، لم أستخدم أيًا منها. الشيء الوحيد الذي قمت به بعد التثبيت هو تمكين مصادقة Google (معرف العميل والسري) وتمكين “استخدام HTTPS دائمًا”.

الوكلاء - أستخدم nginx كوكيل عكسي (الذي يخدم أيضًا موقع التطبيق الرئيسي).

    # discourse
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass_request_headers on;
            proxy_pass http://localhost:10080;
    }

وفي containers/app.yaml

expose:
  - "10080:80"   # http
  - "10443:443" # https

تم تعطيل Let’s Encrypt في إعدادات Discourse. لذلك، يقوم nginx داخل الحاوية بخدمة HTTP العادي، بينما يقوم nginx الخارجي بإنهاء SSL.

هذه إعدادة شبه مطابقة لتلك التي كانت لدي مع النطاق القديم، والفرق الوحيد هو “فرض HTTPS”.

أنا أعمل بالإصدار 2.6.0.beta3.

إعجاب واحد (1)

أوه، عذرًا، الأمر هو “إجبار HTTPS” الذي كنت قد أوقفته سابقًا.

لقد قمت بتفعيله مؤخرًا لتجنب ظهور تحذير في Chrome حول “محتوى صفحة غير آمن”، والذي كان يحدث بسبب وجود روابط صور باستخدام HTTP العادي.

للتأكيد، أقوم بإنهاء SSL في خادم nginx “الخارجي”، وبالنسبة لـ Discourse نفسه، فلا يوجد SSL.

عند تعطيل “إجبار HTTPS”، يعمل مصادقة Google مرة أخرى (كان علي إضافة رابط إعادة توجيه HTTP عادي في مشروع Google Cloud).

لكن هذا ليس جيدًا، لأنه ستظهر تحذيرات “موقع غير آمن” أو محتوى مختلط بمجرد وجود صور.

هل توجد طريقة للحفاظ على عمل مصادقة Google مع تفعيل “إجبار HTTPS” و إنهاء SSL خارج نطاق Discourse؟

(كنت سأستخدم دعم SSL الخاص بـ Discourse نفسه، لكنه يفترض أنه “يمتلك” النطاق، مما يتطلب مني إعداد عنوان IP إضافي لهذا الخادم الافتراضي الخاص (VPS) وفصل الموقع الرئيسي عن المنتدى… وهو ما يمثل بعض المتاعب…)

إعجاب واحد (1)

تأكد من إرسال X-Forwarded-Proto: https مع طلبك.

إعجاب واحد (1)

شكرًا لك @riking. لقد قمت بنسخ كتلة nginx من الرابط الخاص بك حرفيًا، ثم قمت بتفعيل خيار “فرض HTTPS” كما أوصت به وحدة تحكم إدارة Discourse.

عاد المنتدى للعمل الآن، وتعمل مصادقة Google بنجاح.

لكن لا يزال هناك مشكلة قائمة:

تظهر تحذيرات حول محتوى الصفحة غير الآمن في كل من متجري Chrome و Firefox.

عند فحص سجل الشبكة في أدوات مطوري Chrome، يظهر أن الرابط التالي (HTTP عادي وليس HTTPS) هو السبب:

http://forum.sugarmail.app/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_512x512.png

إعجابَين (2)

آه، لا يهم. لقد قمت للتو بتعيين أيقونة موقع مخصصة جديدة، والآن يتم جلبها باستخدام HTTPS. لا توجد بعد الآن تحذيرات “محتوى مختلط”.

رائع، شكرًا لك على مساعدتك!

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.