Повторная Активация (1.10.* микрохак)

+40
2.39K
Всем привет!

Настраивал сегодня у себя отправку писем с активацией аккаунта,
и случайно смоделировал сбой отправки письма с сайта)

Пользователь успешно создался, но письмо Не пришло
Первым делом я решил войти на сайт, что конечно же не получилось ..
Второе, по логике — это попытался восстановить пароль.



Письмо успешно отправилось, но смысла в восстановлении пароля нет, так как
учетная запись попросту не активирована…
Плюс ко всему повторно на этот же почтовый ящик зарегистрироваться система не дает ...

… Для пользователя все плохо… Или новый ящик заводить или админу писать…
время потеряно… нервы тоже ..

Решил доделать немного систему восстановления пароля, что бы она сама решала, что делать :

или письмо на смену пароля слать
или письмо с активацией послать

В общем решение простое и вмешательство будет всего в один файл:

components\registration\frontend.php


нужно найти условие :

  1. if(!$usr) {
  2. cmsCore::addSessionMessage($_LANG['ADRESS'].' "'.$email.'" '.$_LANG['NOT_IN_OUR_BASE'], 'error');
  3. cmsCore::redirectBack();
  4. }
и сразу после добавить:

  1.  
  2. elseif($usr['is_locked'] && !$usr['is_logged_once']) {
  3. $usrid = $usr['id'];
  4. $logn = substr(($usr['login']), 0, 5);
  5. $pas = $logn.(rand(111111, 9999999));
  6. $pasmd = md5($pas);
  7. $inDB->query("DELETE FROM cms_users_activate WHERE user_id = '$usrid'");
  8. $inDB->query("UPDATE cms_users SET password = '{$pasmd}' WHERE id = '$usrid'");
  9. $model->sendActivationNotice($pas, $usrid);
  10. $pas = null; $pasmd = null;
  11. cmsCore::addSessionMessage('Вам повторно выслана инструкция по активации аккаунта
  12.  
  13. Новая ссылка активации будет действовать в течении 3х дней
  14.  
  15. Новый пароль указан в инструкции
  16.  
  17. Если активация не происходит, обратитесь пожалуйста к Администратору сайта', 'info');
  18. $inDB->query("DELETE FROM cms_users_activate WHERE DATEDIFF(NOW(), pubdate) > 3");
  19. cmsUser::clearCsrfToken();
  20. cmsCore::redirectBack();
  21. }
  22.  

Все. Теперь если активация не пройдена (только в этом случае!),
пользователь введя емайл в поле восстановления пароля, получит подсказку и письмо на почту в придачу.
В письме будет новая ссылка на Активацию, а так же прописан Логин и новый сгенерированный Пароль.

… Плюс попутно почистится таблица активаций в базе от устаревших записей…
вроде мелочь, а приятно )
+4
eoleg eoleg 11 лет назад #
+
это должно быть в дистрибутиве
+1
lokanaft lokanaft 11 лет назад #
А проверяется ли, что юзер не был попросту заблокирован админом? is_logged_once можно было бы заюзать для этого)
0
KS KS 11 лет назад #
Да, это нужно делать!, Пост поправил!
По хорошему на восстановление пароля тоже проверку нужно ставить..
Хотя с другой стороны, баном чаще пользуются ..
0
lokanaft lokanaft 11 лет назад #
Как по мне, так бан вообще безполезная вещь, у одного юзера этих айпи как грязи мб и в тоже время целый город можно забанить случайно.
0
KS KS 11 лет назад #
Верно, но все же от спама немного спасает )

А блокировка аккаунта оч хороша там где инвайты.
+1
Роман Роман 11 лет назад #
Нужный хак!
0
KS KS 11 лет назад #
Добавил себе, может еще кому пригодится :

При смене пароля на заблокированном аккаунте
предупреждение (без принуждений)):

после строки :
Код PHP:
  1. cmsCore::addSessionMessage($_LANG['NEW_PAS_SENDED'], 'info');
добавить вот такую :
Код PHP:
  1. if($usr['is_locked'] && $usr['is_logged_once']) {cmsCore::addSessionMessage('*Возможно Ваш аккаунт заблокирован! Обратитесь к администрации сайта!', 'error');}
0
KS KS 11 лет назад #
так видней:
Код PHP:
  1. if($usr['is_locked'] && $usr['is_logged_once'])
  2. {cmsCore::addSessionMessage('*Возможно Ваш аккаунт заблокирован!
  3. Обратитесь к администрации сайта!', 'error');}
0
Константин Г. Константин Г. 11 лет назад #
Спасибо. хорошо.
0
Александр Александр 8 лет назад #
Понадобилось, добавил, работает, спасибо, единственное в 1.10.6 строчка выглядит вот так:
if(!$usr || $usr['is_locked'] || $usr['is_deleted']) {

и что бы заработало пришлось из нее убрать || $usr['is_locked'] - верно или есть подводные камни?

з.ы. это надо включать в коробку...

Еще от автора

Похожие в Универсальном каталоге (хак для 1.x)
На одном из сайтов, где используется универсальный каталог для вывода различных товаров и тд, появилась необходимость сделать вывод похожих при просмо
Плагин  'Вставить фото из своих альбомов' (ver.1.10* & ↑)
Добрый день! Заметил одну особенность..
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.