أنا متأكد تمامًا من أن مشكلة تسجيل الدخول إلى https://www.svetandroida.cz/ عبر Discourse مرتبطة بتخزين الـ nonce مؤقتًا. الطريقة التي اختبرت بها ذلك كانت عن طريق النقر على رابط “تسجيل الدخول باستخدام Discourse” (https://www.svetandroida.cz/?discourse_sso=1&redirect_to=https%3A%2F%2Fwww.svetandroida.cz%2F).
في المرة الأولى التي قمت فيها بذلك، تم توجيهي إلى https://komunita.svetandroida.cz/، وقمت بإنشاء حساب على موقع Discourse باستخدام Gmail، ثم تم توجيهي مرة أخرى إلى موقع WordPress الخاص بك كمستخدم مسجل الدخول.
بعد ذلك، قمت بتسجيل الخروج من موقع WordPress الخاص بك وحاولت تسجيل الدخول مرة أخرى عن طريق النقر على رابط “تسجيل الدخول باستخدام Discourse”. هذه المرة حصلت على خطأ “nonce منتهي الصلاحية”.
بعد ذلك، قمت بإنشاء رابط تسجيل دخول بقيمة عشوائية لمعامل عنوان URL discourse_sso، على سبيل المثال https://www.svetandroida.cz/?discourse_sso=181253058&redirect_to=https%3A%2F%2Fwww.svetandroida.cz%2F وتمكنت من تسجيل الدخول إلى موقع WordPress الخاص بك عبر Discourse دون أي مشاكل.
لقد جربت هذا عدة مرات، سواء مع رابط تسجيل الدخول الذي تم إنشاؤه بواسطة المكون الإضافي (https://www.svetandroida.cz/?discourse_sso=1&redirect_to=https%3A%2F%2Fwww.svetandroida.cz%2F) ومع روابط تسجيل الدخول التي تم تعيين قيمة عشوائية لها لمعامل discourse_sso. يبدو أن الـ nonce الذي يتم إرجاعه يتم تخزينه مؤقتًا لبضع دقائق على الأقل.
بدون تصحيح المشكلة بالكامل، أنا متأكد تمامًا من أنه يمكنك جعل الأمور تعمل فقط عن طريق إضافة ما يلي إلى ملف functions.php الخاص بالسمة الخاصة بك (سيقوم بتعيين سلسلة عشوائية لمعامل عنوان URL discourse_sso. يجب أن يعمل هذا طالما أنه لا يوجد أيضًا “تخزين مؤقت للصفحة” ممكّن على صفحة تسجيل الدخول الخاصة بك.)
add_filter('wpdc_sso_client_query', 'wpdc_custom_sso_client_query' );
function wpdc_custom_sso_client_query() {
return wp_generate_password( 12, false );
}
إذا كنت ترغب في تصحيح المشكلة، فإليك ما أراه لطلب ناجح. لاحظ السطر Cache-Svetzitrka: STALE. قد يشير هذا إلى وجود طبقة تخزين مؤقت مخصصة في مكانها وأن ذاكرة التخزين المؤقت كانت STALE للطلب الناجح (لذلك تم إنشاء nonce جديد.)
ملخص
Request URL:
https://www.svetandroida.cz/?discourse_sso=1&redirect_to=https%3A%2F%2Fwww.svetandroida.cz%2F
Request Method:
GET
Status Code:
302 Found
Remote Address:
93.185.102.156:443
Referrer Policy:
strict-origin-when-cross-origin
Cache-Control:
max-age=0
Cache-Svetzitrka:
STALE
Content-Length:
0
Content-Type:
text/html; charset=UTF-8
Date:
Mon, 11 Dec 2023 09:38:05 GMT
Expires:
Mon, 11 Dec 2023 09:21:47 GMT
Location:
https://komunita.svetandroida.cz/session/sso_provider?sso=bm9uY2U9MGU3NTNjYWNhNjMwNmMzNzM5M2MyODk4MjZlYzMxMjQmcmV0dXJuX3Nzb191cmw9aHR0cHMlM0ElMkYlMkZ3d3cuc3ZldGFuZHJvaWRhLmN6JTJG&sig=32ddcc85bd2dd7175f963e791cc9ac734a607355d773422d3abec6173c9f656b
Server:
nginx
Strict-Transport-Security:
max-age=10886400; includeSubdomains; preload
X-Content-Type-Options:
nosniff
X-Frame-Options:
SAMEORIGIN
X-Redirect-By:
WordPress
هذا ما أراه لطلب فاشل. يبدو أن السطر Cache-Control: no-cache, no-store يشير إلى أنه لا ينبغي تخزين الاستجابة مؤقتًا، ولكن إدخال from service worker في الاستجابة يشير إلى أن الاستجابة قد تأتي من ذاكرة التخزين المؤقت للعامل الخدمي.
ملخص
Request URL:
https://www.svetandroida.cz/?discourse_sso=1&redirect_to=https%3A%2F%2Fwww.svetandroida.cz%2F
Request Method:
GET
Status Code:
302 Found (from service worker)
Referrer Policy:
strict-origin-when-cross-origin
Cache-Control:
no-cache, no-store
Content-Security-Policy:
upgrade-insecure-requests; base-uri 'self'; object-src 'none'; script-src https://komunita.svetandroida.cz/logs/ https://komunita.svetandroida.cz/sidekiq/ https://komunita.svetandroida.cz/mini-profiler-resources/ https://komunita.svetandroida.cz/assets/ https://komunita.svetandroida.cz/extra-locales/ https://komunita.svetandroida.cz/highlight-js/ https://komunita.svetandroida.cz/javascripts/ https://komunita.svetandroida.cz/plugins/ https://komunita.svetandroida.cz/theme-javascripts/ https://komunita.svetandroida.cz/svg-sprite/ https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js 'sha256-8uAKDaK4QxxCeYZl0Wxad2Nnj2tgKyA14hYBh66pnn0='; worker-src 'self' https://komunita.svetandroida.cz/assets/ https://komunita.svetandroida.cz/javascripts/ https://komunita.svetandroida.cz/plugins/; frame-ancestors 'self'; manifest-src 'self'
Content-Type:
text/html; charset=utf-8
Date:
Mon, 11 Dec 2023 09:38:05 GMT
Discourse-Logged-Out:
1
Location:
https://komunita.svetandroida.cz/login
Referrer-Policy:
strict-origin-when-cross-origin
Server:
nginx
Set-Cookie:
sso_payload=sso%3Dbm9uY2U9MGU3NTNjYWNhNjMwNmMzNzM5M2MyODk4MjZlYzMxMjQmcmV0dXJuX3Nzb191cmw9aHR0cHMlM0ElMkYlMkZ3d3cuc3ZldGFuZHJvaWRhLmN6JTJG&sig=32ddcc85bd2dd7175f963e791cc9ac734a607355d773422d3abec6173c9f656b; path=/; SameSite=Lax
Set-Cookie:
_forum_session=kGW2K6gafsjS90qQMEmxzjggEYo4tZPZe76XZNVro34ilyuuHsaYt2nEzC9h6tfiSBmY9XoDdxh1SV3S8n%2BwqrbsD58UvJBz6khjm%2Fty83ufkgry8daHDdyoTfFwQOjAbXrWeGIwkS4edGY1XetNwXhu%2FNJUghqmq8BEUycBt7098KUO%2BmRYDl5iSL0FNhUzo5Hc7xwRg0tfxuxmb%2FIyVLnbFz6IJuGB3Y95PRcU5DYIwAAny1GQbKQ23kSjgALxAThG7aA%2B7LCI9cJNWV1JRSy%2FTElDN3iugKuVpaQcrSPhV3SvQaiNH3MCfLwu6yxlp%2BZ%2BwTyw22czX8bb197z36WhlbghYtxvKYGRjONJQUagisjPpMrCAcGeTKsGB4JgnUKCtlrwIoFvaDxjec7hMo3aCnibbbkmcxWc6LvD6G2xaxkDgebe7RpvfTYdG8cn8j6rNwX3hM8la4RqZnmma0%2FQlSrfj0BjfY7lnan6TYm28vLwH%2FFfdZoRbo6JdTs5AFjCJvx9UXSjFmoXHH1R1yfAizPeKDFnpiuUs4a%2FBzWafQ%3D%3D--8PEvbWwpqBuJMSRJ--CzzhBea4mmv58a7KLEnukw%3D%3D; path=/; secure; HttpOnly; SameSite=Lax
Set-Cookie:
_t=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Lax
Strict-Transport-Security:
max-age=31536000
Vary:
Accept
X-Content-Type-Options:
nosniff
X-Discourse-Route:
session/sso_provider
X-Download-Options:
noopen
X-Frame-Options:
SAMEORIGIN
X-Permitted-Cross-Domain-Policies:
none
X-Request-Id:
001750b9-94f2-4bf0-8503-9d673463b91e
X-Runtime:
0.012335
X-Xss-Protection:
0