Добавить сайт в каталог БЕСПЛАТНО в каталоге уже более 1065 сайтов!!!


Иногда случается так, что пароль намертво выходит из головы и его приходится восстанавливать. Если на сайте нет автоматической системы восстановления, то администратору придется вручную восстанавливать пользователю пароль. Это тратит и время пользователя, и время администратора, поэтому сегодня мы создадим автоматическую систему восстановления пароля.

Первым делом, как и всегда при работе на MVC нам нужно прописать маршрут, в файле routes.php.

'user/reset_password' => 'user/reset',

 

Далее переходим в папку controller и открываем файл UserController.php. В него нам нужно написать метод, который будет отрисовывать страницу, и обрабатывать данные которые будут получены с формы.

Если нажата кнопка на форме, методом POST получаем данные из формы и записываем их в переменную email. Проверяем, правильно ли введен адрес электронной почты, если нет, то  выводим соответствующее сообщение, иначе, идем далее:

public function actionReset()
{
    $index['title'] = 'Восстановление пароля';
    if (isset($_POST['submit'])) {
        $email = $_POST['email'];
        $email_send = $email;
        if (!User::checkEmail($email)) echo 'Неверно указан E-mail'.'<br>';

 

Проверяем, если ли пользователь с введенным адресом электронной почты существует в базе данных то отправляем ему новый сгенерированный пароль. Если result имеет значение false, то выводим сообщение, что такого пользователя не существует. Иначе в переменную check записываем массив данных пользователя из БД.

В переменную id_user записываем id пользователя из массива check. Теперь с помощью функции generate_password получаем случайный пароль и записываем его в переменную password. Далее, с помощью функции generateHash, хешируем наш случайный пароль.

Далее с помощью функции editPassword меняем пользователю пароль на сгенерированный.

        else
        {
            $result = User::checkUserEmail($email);
            if ($result == true)
            {
                $check = User::checkUserDataHash($email);
                $id_user = $check['id'];
                $password = User::generate_password();
                $hash_password = User::generateHash($password);
                User::editPassword($id_user, $hash_password);

 

Если функция sendEmailPassword, которая отправляет новый пароль на адрес электронной почты, вернула нам true, то показываем пользователю страницу, на которой будет написано, что новый пароль отправлен на почту. Иначе выводим сообщение с ошибкой:

                if (User::sendEmailPassword($email_send,$password))
                {
                    // Подключаем вид
                    require_once(ROOT . '/views/user/reset_password_ok.php');
                    return true;
                } else $errors[] = 'Ошибка почтового клиента';
            } else $errors[] = 'Пользователя с таким E-mail не существует';
        }
    }
    // Подключаем вид
    require_once(ROOT . '/views/user/reset_password.php');
    return true;
}

 

Если какая-то из проверок вернула ошибку, то мы возвращаем пользователя на страницу восстановления пароля и показываем ему ошибки.

Заходим в папку models, открываем файл User.php. В него нам требуется записать следующие функции:

Функция generate_password - генерирует случайный шестизначный пароль, путем выбора случайного элемента из массива:

public static function generate_password($number = 6)
{
    $arr = array('a','b','c','d','e','f',
        'g','h','i','j','k','l',
        'm','n','o','p','r','s',
        't','u','v','x','y','z',
        'A','B','C','D','E','F',
        'G','H','I','J','K','L',
        'M','N','O','P','R','S',
        'T','U','V','X','Y','Z',
        '1','2','3','4','5','6',
        '7','8','9','0');
    // Генерируем пароль
    $pass = "";
    for($i = 0; $i < $number; $i++)
    {
        // Вычисляем случайный индекс массива
        $index = rand(0, count($arr) - 1);
        $pass .= $arr[$index];
    }
    return $pass;
}

 

Функция editPassword – эта функция заменяет пароль полученного пользователя, на указанный пароль:

public static function editPassword($id_user, $hash_password)
{
    // Соединение с БД
    $db = Db::getConnection();
    // Текст запроса к БД
    $sql = "UPDATE users SET password = :password WHERE id = :id";
    // Получение и возврат результатов. Используется подготовленный запрос
    $result = $db->prepare($sql);
    $result->bindParam(':id', $id_user, PDO::PARAM_INT);
    $result->bindParam(':password', $hash_password, PDO::PARAM_STR);
    return $result->execute();
}

 

sendEmailPassword – функция, которая отправляем новый пароль пользователю. В переменные fromMail и fromName пишем адрес электронный почты, с которого будет оправлено письмо и имя отправителя. В переменную emaiTo записываем адрес электронной почты получателя.

В subject и headers задаем параметры, которые будет использовать функция отправки сообщений.

В переменную body записываем текст сообщения, а также переменные с адресом электронной почты и паролем пользователя. Далее выполняем саму функции отправки сообщений – mail. Это стандартная функция PHP, дополнительно ничего дописывать не нужно.

public static function sendEmailPassword($email,$password)
{
    $fromMail = 'admin@goodnets.ru';
    $fromName = 'GOODNETS';
    $emailTo = $email;
    $subject = 'Восстановление пароля ';
    $subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
    $headers = "Content-type: text/plain; charset=\"utf-8\"\r\n";
    $headers .= "From: ". $fromName ." <". $fromMail ."> \r\n";
    $body = "Ваш новый пароль был сгенерирован автоматически, настоятельно рекомендуем изменить его\n
               E-mail: $email\n
               Пароль: $password\n";
    $mail = mail($emailTo1, $subject1, $body1, $headers1, '-f'. $fromMail1 );
    if ($mail) return true;
    else return false;
}

 

Функции checkUserEmail, checkUserDataHash, generateHash описаны в уроках по созданию регистрации и авторизации.

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

Здесь может быть ваша реклама! Блок 1. Настройка рекламы в личном кабинете.
Grai Просмотров сегодня +1 26 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
Займы от инвесторов, кредит под залог недвижимости https://capitalinvestbv.ru Вернуть деньги на счёт микрофинансовой компании можно любым удобным способом, например, через систему денежных переводов, с помощью банковской карты, через платежные терминалы или в офисе самой компании. Существует возможность досрочного погашения займов. Сделать это можно, обратившись по телефону горячей линии.
SEO продвижение ваших сайтов от 25 000 руб. в мес. Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
irogex.ru
→ BULLET-SHOP - сварка аргоном, полуавтомат, тюнинг авто!
Реклама Ремонтируем радиаторы, интеркулеры, пайпинг и ВСЁ из алюминия, чугуна, стали с ГАРАНТИЕЙ КАЧЕСТВА. Диагностика и ремонт подвески, трансмиссии, всех узлов и агрегатов
www.bullet-shop.pro
→ Доставка товаров из Китая в кротчайшие сроки без переплат!
Реклама Вам нужен товар из Китая мы с радостью доставим его, а также поможем с выкупом товара с ТаоБао, АлиБаба, 1688.com. Помощь в переводе при заключении сделок!
www.unikorob.ru
Реклама помогает поддерживать
и развивать наш сервис.


Подробнее
(ссылка откроется в новой вкладке)