فشل المصادقة! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError" خطأ ناتج عن غياب session["omniauth.state"]

مرحبًا،
نحاول نشر منتديات Discourse في وضع الإنتاج. نحن نستخدم مزوّد OAuth خاص بنا، وبالتالي نستخدم إضافة discourse-oauth2-basic لتمكين ذلك.

نواجه الخطأ التالي عند تسجيل الدخول باستخدام مزوّد OAuth المخصص:

“فشل المصادقة! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | تم اكتشاف CSRF”

بعد بعض التصحيح، اتضح أن “omniauth.state” مفقود في الجلسة بعد حدوث إعادة التوجيه، مما يجعل من المستحيل التحقق من حقل الحالة في /auth/oauth2_callback. نرحب بأي مساعدة.

ملاحظة: يعمل الإعداد بالكامل بشكل صحيح في وضع التطوير.

شكرًا لكم.

هل تبدأ المصادقة وتنتهي في نفس المتصفح؟ هل قمت بتغيير قيمة إعداد “كوكيز نفس الموقع” الافتراضية؟

نعم @david، يبدأ المصادقة وينتهي في نفس المتصفح. لم يتم تغيير قيمة same_site_cookies. القيمة الافتراضية مضبوطة على “Lax”.

هل تتبع دليل التثبيت القياسي الخاص بنا هنا؟

للأسف، من الصعب جدًا علينا المساعدة هنا دون القدرة على رؤية الموقع. هل يمكنك مشاركة رابط؟

مرحبًا @david، نحن نقوم بتشغيل Discourse باستخدام حاويات Docker. ملف Docker الذي نستخدمه هو discourse_docker/image/base at master · discourse/discourse_docker · GitHub. نظرًا لعدم وجود سكريبت لبدء تشغيل Discourse داخل حاوية Docker، فقد أضفنا سكريبت بدء صغير يقوم بترجمة الكود مسبقًا وبدء تشغيل Discourse.
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompile
RAILS_ENV=production bundle exec rails server --binding=0.0.0.0

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