Удаление спам пользователей из базы

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 6 сентября 2022 в 14:57

Добрый день, друзья, не стояла капча, накопилось порядка 19тысяч регистраций, большая часть из них спам, часть порядка 1000 реальных. Теперь капчу подключил. Хочу удалить спам пользователей. Но руками такой объем чистить не вариант. 

Вот что пришло в голову, массово перевести статус спам пользователей, как будто они не подтвердили регистрацию по почте, при помощи запроса в ПХП май админ и фильтрации по явным спам мейлам. Затем есть механизмам, который удаляет не верифицированные профили (Удаление пользователей, не прошедших верификацию) в админке по крону.

Вот такой запрос получился

update `cms_users` set `is_locked` = '1', `lock_reason` = 'Требуется подтверждение адреса e-mail' WHERE `email` like '%@%.fun' OR `email` like '%@%.fun' OR `email` like '%@%.space' OR `email` like '%@%in.net' OR `email` like '%@%.site' OR `email` like '%.%.%.%.%@gmail.com'

Так вот, запрос проходит, статус меняется в таблице cms_users, но когда запускается задача (Удаление пользователей, не прошедших верификацию) в админке. Пользователи не удаляются. Может быть еще в какой-то таблице нужно добавить значение, а не только изменить `is_locked` = '1' ? 

Выгружать таблицу и удалять через Эксель не считаю правильным, так как есть взаимосвязи c пользователями в других таблицах, и потом могут быть ошибки и битые ссылки, поэтому считаю что нужно использовать штатный механизм удаления пользователей.

#2 6 сентября 2022 в 16:13

 Юрий Юрьевич, посмотрите на то, как получаются пользователи, не прошедшие верификацию github.com/instantsoft/icms2/blob/be31865fec0d8b3b4ba00a3273c9d3e6ee3d4a91/system/controllers/auth/hooks/cron_delete_expired_unverified.php#L13

Одного is_locked мало

#3 6 сентября 2022 в 17:09

Панель управления — Настройки — Планировщик — Удаление пользователей не прошедших верификацию.

Стартаните задание вручную, там справа значок «Выполнить сейчас».

#4 6 сентября 2022 в 17:48

 Ris, так тс так и делает. И никто не удаляется, так как is_locked = 1 мало для удаления пользователя. Нужны еще правки в базе, чтобы представить пользователя в системе как невирифицированного

#5 6 сентября 2022 в 21:19

is_locked = 1 мало для удаления пользователя.

Zau4man

Тогда смотрим, что нужно для удаления неверифицированных.

Файл \system\controllers\auth\hooks\cron_delete_expired_unverified.php

Вот что нужно:

$users_model->filterNotNull('is_locked')->
                filterNotNull('pass_token')->
                filterDateOlder('date_reg', $verify_exp, 'HOUR')->
                filterIsNull('ip')->
                filterIsNull('lock_until');

То есть нужно, чтобы is_locked = 1, pass_token не NULL, дата регистрации старее 48 часов (или сколько настроено в настройках), неопознанный ip и lock_untill IS NULL.

Что из этих параметров не позволяет удалить не прошедших верификацию спамеров?

 Юрий Юрьевич

Посмотрите в базе, в таблице cms_users одного спамера и пришлите содержимое его строки сюда.

#6 6 сентября 2022 в 21:37

так как есть взаимосвязи c пользователями в других таблицах

Юрий Юрьевич

У спамеров-то?

Мне думается, вот вы пометили кого нужно удалить `is_locked` = '1', следующим запросом удалить их всех по этому критерию. 

#7 19 сентября 2022 в 12:08

Zau4man, Ris, IamB. Всем большое спасибо за помощь 

По итогу сделал вот как,
Собрал id юзеров которые хотя бы раз размещали контент на сайте 

отправил запрос 
update `cms_users` set `is_locked` = '1';
update `cms_users` set `is_locked` = Null WHERE `id` like '1' OR `id` like '2'… ;

 временно поправил файл  \system\controllers\auth\hooks\cron_delete_expired_unverified.php,  убрал из него вот это

                filterNotNull('pass_token')->
                filterDateOlder('date_reg', $verify_exp, 'HOUR')->
                filterIsNull('ip')->
                filterIsNull('lock_until')

проверку условий корме первого. 

Далее запустил задачу  Удаление пользователей, не прошедших верификацию 

Все сработало 

Вообще можно было б написать соответствующую задачу и хук

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.