أنا أستخدم كائن Discourse JS للمستخدم للتحقق من المجموعات التي “ينتمي” إليها المستخدم الحالي.
بالنسبة لبعض المستخدمين، تُرجع مصفوفة groups في كائن JS الخاص بالمستخدم مصفوفة صحيحة من الكائنات، كل منها يصف مجموعة ينتمي إليها هذا المستخدم. مثال:
groups: Array (5)
0 {
id: 1,
name: "admins",
has_messages: false
}
1 {
id: 46,
name: "custom-group",
has_messages: false
}
2 {
id: 3,
name: "staff",
has_messages: false
}
3 {
id: 10,
name: "trust_level_0",
has_messages: false
}
4 {
id: 11,
name: "trust_level_1",
has_messages: false
}
ومع ذلك، بالنسبة لـ معظم المستخدمين، تكون مصفوفة groups فارغة ببساطة (0).
لا يمكنني معرفة سبب حدوث ذلك، نظرًا لأن هؤلاء المستخدمين هم أعضاء في مجموعات بشكل صحيح.
لقد تحققت أيضًا مما إذا كان الأمر يتعلق بـ “المجموعة الأساسية”، ومع ذلك، فإن المستخدمين الذين لديهم مصفوفة groups ليسوا أيضًا في أي مجموعة أساسية، لذا فهذه ليست المشكلة.
أنا أستخدم اتصال WP SSO لإدارة تسجيل دخول المستخدمين، لذا يقومون بتسجيل الدخول على مثيل WP، ومثيل Discourse هو في الأساس “تابع” لـ WP، مما يعني أن Discourse يسحب جميع بيانات المستخدم من WP، ويتم التعامل مع تسجيل الدخول في WP.
لقد تأكدت من أن المستخدم “المعطوب” قد قام بتسجيل الدخول بشكل صحيح مرة واحدة على الأقل في WP وذهب مرة واحدة على الأقل إلى Discourse حتى يتم تسجيل دخوله، ويمكنني التأكد من أن المستخدم يتم إضافته إلى المجموعات الصحيحة - إنه ببساطة غير مرئي في مصفوفة groups في كائن JS الخاص بالمستخدم.
هل يمكن لأي شخص مساعدتي في اكتشاف سبب حدوث ذلك، و كيف يمكنني إصلاحه؟
أنا “بحاجة ماسة” إلى المجموعة التي ينتمي إليها المستخدم في تلك المصفوفة ![]()
بالمناسبة، إذا كان الأمر مهمًا، فهذه هي الطريقة التي أقوم بها بجلب كائن JS الخاص بالمستخدم الحالي - يعمل بشكل رائع حتى الآن ما لم تكن مشكلة المجموعات تؤثر على بعض المستخدمين (معظمهم، في الواقع).
$(document).ready(function() {
$.ajax({
type: 'GET',
cache: false,
url: 'https://discourse.domain.tld/session/current.json',
dataType: 'json',
xhrFields: {
'withCredentials': true
},
success: function(result){
var current_user_groups = result.current_user.groups;
console.log(current_user_groups);// هذا يُرجع فارغًا للعديد من المستخدمين.
console.log(result.current_user);// جميع البيانات هنا مملوءة بشكل صحيح لجميع المستخدمين، ما لم تكن مصفوفة GROUPS.
},
error: function(result){
console.log('Error: '+result);
}
});
});
