مرحباً، أنا أعمل على بناء واجهة برمجة تطبيقات (API) لتسجيل الدخول إلى Discourse باستخدام Apple. لقد قمت بالفعل بتثبيت المكون الإضافي واتبعت التعليمات من Discourse Apple Authentication. إنه يعمل بشكل جيد عند تسجيل الدخول إلى Discourse باستخدام حساب Apple على الموقع الإلكتروني.
بعد التحقق من تدفق تسجيل الدخول عبر Apple من الويب، لاحظت أنه يعيد التوجيه إلى صفحة Apple لتسجيل الدخول، ويحصل على رمز تم إنشاؤه من Apple عند تسجيل الدخول بنجاح، ثم يعيد التوجيه إلى:
POST {{discourse_host}}/auth/apple/callback مع المعلمات state:{state}, code:{code from Apple}
بعد ذلك، يعيد التوجيه إلى GET {{discourse_host}}/auth/apple/callback?code={{code from Apple}}&state={state}، مما يؤدي إلى إنشاء ملف تعريف ارتباط جديد سيتم استخدامه في واجهة برمجة تطبيقات Discourse.
من هذا التدفق، أتوقع أنه سيتم إنشاء ملف تعريف ارتباط جديد بعد استدعاء /auth/apple/callback
ولكن عندما أحاول استدعاء واجهة برمجة التطبيقات، تظهر لي رسالة الخطأ Authorization timed out, or you have switched browsers. Please try again.
لذلك حاولت مرة أخرى برمز جديد تم إنشاؤه بواسطة Apple ولكنني ما زلت أحصل على نفس الخطأ.
وعندما أتحقق من السجل، يظهر:
Started GET "/auth/apple/callback?code=c32f105b5084d42b8bd3e7051873ddb55.0.rrzxz.pChPU9zGlXIHHhgEXLiA5g&state=fbi3bbboud" for
(apple) Setup endpoint detected, running now.
(apple) Callback phase initiated.
(apple) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Started GET "/auth/failure?message=csrf_detected&strategy=apple" for 123.253.233.16 at 2023-11-27 06:10:28 +0000
Processing by Users::OmniauthCallbacksController#failure as HTML
Parameters: {"message"=>"csrf_detected", "strategy"=>"apple"}
Rendered users/omniauth_callbacks/failure.html.erb within layouts/no_ember (Duration: 4.1ms | Allocations: 17)
Rendered layout layouts/no_ember.html.erb (Duration: 57.5ms | Allocations: 2882)
Message (47 copies reported)
(apple) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Backtrace
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:163:in `log'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:486:in `fail!'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-oauth2-1.7.3/lib/omniauth/strategies/oauth2.rb:87:in `callback_phase'
/var/www/discourse/plugins/discourse-apple-auth/lib/omniauth_apple.rb:60:in `callback_phase'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:238:in `callback_call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:192:in `call!'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:192:in `call!'
لذلك، أريد أن أسأل ما إذا كان هذا الاتجاه لاستخدام تسجيل الدخول عبر Apple في Discourse باستخدام واجهة برمجة التطبيقات صحيحًا، وكيف يمكنني حل مشكلة خطأ csrf_detected؟





