Я использую объект пользователя 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).
Я не могу понять, почему это происходит, поскольку эти пользователи действительно состоят в группах.
Я также проверил, связано ли это с «основной группой» (primary group), однако пользователи, у которых есть массив 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);
}
});
});
