DiscuzX 3.5 + UCenter 1.7.0
При удалении пользователя в UCenter управлении пользователями отображается сообщение "Уведомление Discuz не удалось". При проверке через центр управления пользователями Discuz и базы данных, удалённый пользователь всё ещё существует.
Вчера произвёл обновление с версии Discuz! X3.5 Release 20240520 до Discuz! X3.5 Release 20250205 используя пакет обновления от официального сайта.
Ранее всегда использовался центр управления пользователями Discuz для редактирования информации о пользователях. Сегодня случайно попробовал удалить пользователя через UCenter, но после удаления пользователь продолжает существовать как в Discuz так и в базе данных. После проверки связи было установлено, что связь между UCenter и Discuz работает корректно, однако при попытках повторной отправки уведомлений они каждый раз завершаются ошибкой.
count(): Аргумент #1:I created an additional security question but forgot, can it be reset? ($value) должен быть типа Countable|array, string передан
PHP: api/uc.php#uc_note->uc_note->deleteuser():0064
api/uc.php#uc_note_handler::uc_note_handler::deleteuser():0100
uc_client/extend_client.php#discuz_table_archive->discuz_table_archive->fetch_all():0024
source/class/discuz/discuz_table_archive.php#break():0042
Пользователь: uid=0; IP=здесь не указывается; RIP: здесь не указывается Запрос: /api/uc.php?code=d99fDKs3YXyh%2FHL0LwT68%2BlgUYrlLshqrXCAlnYXO2tMA6vApjhSYfP%2FgjDxL9fV4nku8bmzX4PL8A03pQ%2FS9%2FtCXKSI%2F4nKEoA×=1### Проблемы, с которыми столкнулся при решении проблемы
После выявления проблемы были произведены ряд изменений в файле /uc_client/extend_client.php
, что позволило решить данную проблему.
Исходный код:
public static function deleteuser($get, $post) {
global $_G;
$uids = str_replace("'", '', stripslashes($get['ids']));
$ids = array();
$ids = array_keys(C::t('common_member')->fetch_all($uids));
require_once DISCUZ_ROOT.'./source/function/function_delete.php';
$ids && deletemember($ids);
return API_RETURN_SUCCEED;
}
Приведён к следующему виду:
public static function удалениепользователя($get, $post) {
global $_G;
$uids = str_replace("'", '', stripslashes($get['ids']));
$uidsArray = explode(',', $uids);
$uidsArray = array_map('intval', $uidsArray);
$uidsArray = array_filter($uidsArray);
if (empty($uidsArray)) {
return API_RETURN_FAILED;
}
$members = C::t('common_member')->fetch_all($uidsArray);
$ids = array_keys($members);
require_once DISCUZ_ROOT . './source/function/function_delete.php';
if (!empty($ids)) {
deletemember($ids);
}
return API_RETURN_SUCCEED;
}
Замечание: В данном контексте было решено использовать более понятные названия функций на русском языке, такие как "удалениепользователя", чтобы обеспечить лучшее понимание кода для русскоязычных разработчиков. Однако, если используется конкретная конвенция именования функций в проекте, следует придерживаться её.
Версия Discuz!: Discuz! X3.5 Release Yöntem 20250205 UTF-8
Версия UCenter: UCenter 1.7.0 Release 20250205
Система сервера и PHP: Linux(Linux) / PHP 8.0.26 / fpm-fcgi
Программное обеспечение сервера: nginx/1.24.0
Версия MySQL сервера: 5.7.44-log
Ограничение размера файла: 50М### Другие версионные данные
1: Тестирование управления пользователями в UCenter — изменение электронной почты пользователя — обновление данных UCenter (электронная почта была изменена), но данные в Discuz и базе данных (электронная почта) остались без изменений.
2: Возможно, при управлении пользователями в UCenter — редактировании информации пользователя (никнейм, электронная почта, пароль и т.д.) возникают такие проблемы.
X3.5