И снова здравствуй, дорогое сообщество!
Собственно хотел помочь человеку в теме instantcms.ru/forum/thread14031-1.html и залез в код, заметил в запросе кое-какой баг.
С одной стороны "зачем занимать логин, если профиль тебе не нужен" (я так понял, что разработчики придерживались этого, написав код), но с другой — система InstantCMS предусматривает возможность восстановления пользователя после удаления, но удалив профиль наш пользователь может его лишиться навсегда. Теряется доступ к своему профилю — невозможно будет авторизоваться и восстановить пользователь.
Объясню на примере. Мой логин на тестовом сайте WALTERZ. Удаляю свой профиль через настройки. Значение поля is_deleted меняется на 1. Захожу в регистрацию и пробую зарегистрироваться под логином WALTERZ.
Логин свободен и мы можем зарегистрироваться без проблем :)
В итоге:
Почему так происходит?
Всё очень просто на самом деле. Проверка свободного логина при регистрации осуществляется лишь по не удаленным профилям. Т.е. в запросе стоит условие is_deleted=0.
Исправляем.
Нам нужно убрать условие проверки на "удаленность" всего-то.
Файл /core/ajax/registration.php
InstantCMS 1.9 (в предыдущих версия наверняка также, не смотрел).
Заменяем:
На:
Файл /components/registration/frontend.php
Заменяем:
На:
InstantCMS 1.10+
Заменяем:
На:
Файл /components/registration/frontend.php
Заменяем:
На:
Готово. Теперь проверка на уникальность логина будет осуществляться по всем пользователям.
Собственно хотел помочь человеку в теме instantcms.ru/forum/thread14031-1.html и залез в код, заметил в запросе кое-какой баг.
С одной стороны "зачем занимать логин, если профиль тебе не нужен" (я так понял, что разработчики придерживались этого, написав код), но с другой — система InstantCMS предусматривает возможность восстановления пользователя после удаления, но удалив профиль наш пользователь может его лишиться навсегда. Теряется доступ к своему профилю — невозможно будет авторизоваться и восстановить пользователь.
Объясню на примере. Мой логин на тестовом сайте WALTERZ. Удаляю свой профиль через настройки. Значение поля is_deleted меняется на 1. Захожу в регистрацию и пробую зарегистрироваться под логином WALTERZ.
Логин свободен и мы можем зарегистрироваться без проблем :)
В итоге:
Почему так происходит?
Всё очень просто на самом деле. Проверка свободного логина при регистрации осуществляется лишь по не удаленным профилям. Т.е. в запросе стоит условие is_deleted=0.
Исправляем.
Нам нужно убрать условие проверки на "удаленность" всего-то.
Файл /core/ajax/registration.php
InstantCMS 1.9 (в предыдущих версия наверняка также, не смотрел).
Заменяем:
$sql = "SELECT id, login FROM cms_users WHERE (login LIKE '$data') AND (is_deleted = 0) LIMIT 1";
$sql = "SELECT id, login FROM cms_users WHERE (login LIKE '$data') LIMIT 1";
Заменяем:
$sql = "SELECT id, login, email FROM cms_users WHERE (login LIKE '$login' OR email LIKE '$email') AND (is_deleted = 0)";
$sql = "SELECT id, login, email FROM cms_users WHERE (login LIKE '$login' OR email LIKE '$email')";
Заменяем:
$sql = "SELECT id, login FROM cms_users WHERE LOWER(login) LIKE '".mb_strtolower($data)."' AND is_deleted = 0 LIMIT 1";
$sql = "SELECT id, login FROM cms_users WHERE LOWER(login) LIKE '".mb_strtolower($data)."' LIMIT 1";
Заменяем:
$user_exist = $inDB->get_fields('cms_users', "(login LIKE '{$item['login']}' OR email LIKE '{$item['email']}') AND is_deleted = 0", 'id, login, email');
$user_exist = $inDB->get_fields('cms_users', "(login LIKE '{$item['login']}' OR email LIKE '{$item['email']}')", 'id, login, email');
Реклама #
st.Puh 11 лет назад #
WALTERZ 11 лет назад #
Def 11 лет назад #
WALTERZ 11 лет назад #
Роман 11 лет назад #
Если разработчики посчитают нужным, то можно и внести это уже в двиг.
Я так считаю что не повредило бы.
picaboo 11 лет назад #
lokanaft 11 лет назад #
WALTERZ 11 лет назад #
lokanaft 11 лет назад #
WALTERZ 11 лет назад #
Май 11 лет назад #
Тут либо совсем убирать возможность регистрации под удаленным логином удаленного профиля, но с блокировкой регистрации (сейчас ее нет, lokanaft прав), еще круче было бы сделать возможность восстановления сделав привязку к email.
Да, и спасибо, что решились взятся помочь человеку из этой темы http://instantcms.ru/forum/thread14031-1.html (-:
Май 11 лет назад #
WALTERZ 11 лет назад #
Как смогу, обязательно помогу с вашу темой ;)
Май 11 лет назад #
А на счет текущей темы: я тестировал на чистой 1.10.1, при попытке зарегить логин удаленного профиля - появляется сообщение что логин уже занят, но тем не менее можно продолжить регистрацию, и зарегить таки этот логин. С этим нужно что-то делать.
WALTERZ 11 лет назад #
Вот только что попробовал - вылезла ошибка "Логин "walterz" уже занят!" и регистрацию продолжить невозможно.
Май 11 лет назад #
Удаляем пользователя с логином test
http://screenshotuploader.com/s/01/1n8fbg-6x
Регистрируем нового пользователя с логином test
http://screenshotuploader.com/s/01/bi9zv6ob2
Жмем кнопку Регистрация, и вуаля
http://screenshotuploader.com/s/01/dd7rvb1ze
Новый профиль с ранее удаленным логином создан.
WALTERZ 11 лет назад #
Май 11 лет назад #
Небольшое дополнение, чтобы хак был полностью законченным, возможно стоит сделать отображение сообщения "Указанный e-mail уже зарегистрирован!" внизу под полем ввода, сейчас не выводится, показывает только после попытки зарегистрировать.
WALTERZ 11 лет назад #
Пост обновлен.
Торопился с утра и как-то забыл написать про frontend.php.
lokanaft 11 лет назад #
Константин Г. 11 лет назад #
WALTERZ 11 лет назад #
Константин Г. 11 лет назад #
Константин Г. 11 лет назад #
WALTERZ 11 лет назад #
1.10.1 тогда ещё не было. Наверное исправили.
Константин Г. 11 лет назад #
Май 11 лет назад #
Константин Г. 11 лет назад #
WALTERZ 11 лет назад #
Делайте так, как написано после:
InstantCMS 1.10+
Константин Г. 11 лет назад #
Константин Г. 11 лет назад #
WALTERZ 11 лет назад #
WALTERZ 10 лет назад #
Так что в посте есть инструкция для актуальной версии (читать под надписью "InstantCMS 1.10+").
Андрей 10 лет назад #
WALTERZ 10 лет назад #