UMIhelp
Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: kroxa от 02 Июня 2011, 16:38:08
-
umi стандартно восстанавливает пароль на основе логина, однако не все пользователи помнят свой логин.
в этом большая проблема.
необходимо добавить возможность восстановления пароля на основе введенного пользователем e-mail
сейчас используется tpl версия (начал править /tpls/users/forget/default.tpl)
и плавно перешел к classes\modules\users\__forget.php
строка 25:
$sel = new selector('objects');
$sel->types('object-type')->name('users', 'user');
$sel->where('login')->equals($forget_login);
$sel->where('e-mail')->equals($forget_email);
$sel->option('or-mode');
$sel->limit(0, 1);
или такой подход неверен, нужно как-то по другому делать?
-
по первому из-за чего-то не получилось зато заработало в таком виде, что очень удобно. странно что до сих пор этого не было сделано в UMI
$sel = new selector('objects');
$sel->types('object-type')->name('users', 'user');
$sel->where('login')->equals($forget_login);
$sel->limit(0, 1);
if($sel->first) {
$user_id = $sel->first->id;
} else {
$sel = new selector('objects');
$sel->types('object-type')->name('users', 'user');
$sel->where('e-mail')->equals($forget_login);
$sel->limit(0, 1);
if($sel->first) {
$user_id = $sel->first->id;
} else {
$user_id = false;
}
}
теперь встала задача, как обеспечить логин, не только по логину, но и по e-mail пользователя
т.е. указываем e-mail и пароль, но что-то в login_do() разобраться не могу:(
-
для логина по e-mail пришлось переписать checkLogin() - вернее написал свой:
public function checkLogin($login, $password) {
$sel = new selector('objects');
$sel->types('object-type')->name('users', 'user');
$sel->where('login')->equals($login);
$sel->where('password')->equals(md5($password));
$sel->where('is_activated')->equals(true);
if($sel->first) {
return $sel->first;
}
$sel = new selector('objects');
$sel->types('object-type')->name('users', 'user');
$sel->where('e-mail')->equals($login);
$sel->where('password')->equals(md5($password));
$sel->where('is_activated')->equals(true);
$sel->limit(0, 1);
return $sel->first;
}
-
я так понимаю тут больше не вопрос, а ваш вариант решения авторизации и восстановления пользователя не только по логину, но и по e-mail.
Судя по коду я именно так его и менял когда надо было привязаться не только к логину но и к e-mail. Единственное чтобы добавил, новый функционал надо вынести в кастомные макросы прописать на них кастомные права, иначе при обновлении все ваши правки затрутся)
может имеет смысл на основе ваших постов написать тему и разместить её на umihelp.ru со ссылкой на вас? возьметесь за такое?
-
сначала был вопрос, но ждать не хотел, вот сам и сделал кое-как.
я бы написал эту заметку, однако не владею вопросом как именно оформляются "кастомные макросы", т.е. я в umi разбираюсь только по необходимости. Может быть кинете ссылку как это оформляется.
так что оформить могу только то, что есть сейчас, если подскажете про "кастомные макросы", сделаю "правильно".
-
там в принципе ничего сложного нет, я на примере вашей задачи распишу в статье и заодно про вашу доработку напишу и покажу как её вынести в отдельные макросы, чтобы она не перезатиралась при обновлении.
Отпишите в личку как вас упоминать в статье, ссылкой, ником или еще как.