Как на MVC при помощи PHP создать регистрацию с хешированием пароля


X

Как на MVC при помощи PHP создать регистрацию с хешированием пароля

В этой статье мы рассмотрим, как создать регистрацию пользователя в вашей системе.

Создаем в базе данных таблицу с именем users, она будет иметь следующий вид:

 

Далее заходим в папку config и открываем файл routes.php. Тут нам нужно прописать путь к методу отрисовки страницы с регистрацией:

'user/register' => 'user/register',

 

Теперь создадим форму с полями для регистрации. Она будет содержать следующее: поле для ввода логина, поле для ввода пароля, поле для ввода адреса электронной почты и кнопка для отправки данных. Также придадим форме более приятный вид с помощью CSS:

<html>
<head></head>
<body>
    <div style="color: red; font-size: 14px; padding: 20px; margin: 0 auto; display: block; width:400px;">
        <?php if (isset($errors) && is_array($errors)): ?>
            <ul>
                <?php foreach ($errors as $error): ?>
                    <li> - <?php echo $error; ?></li>
                <?php endforeach; ?>
            </ul>
        <?php endif; ?>
    </div>

    <form action="" method="post" class="form-login" style="display: block; width: 400px; margin: 0 auto;  padding: 20px; text-align: center;">
        <h2><center>Авторизация</h2></center><br>
        <input type="text" name="email" placeholder="E-mail" value="<?php echo $email; ?>"/><br><br>
        <input type="text" name="login" placeholder="Логин" value="<?php echo $login; ?>"/><br><br>
        <input type="password" name="password" placeholder="Пароль" value="<?php echo $_POST['password']; ?>"/><br><br>
        <div class="os"></div>
        <input type="submit" name="submit" class="btn btn-default" style="width: 120px;" value="Вход" />
        <div class="os"></div>
        <div style="font-size: 14px; color: #777;">
            Если вы еще по какой то причине не зарегистрированы на нашем сервисе, то не теряйте времени <a href="/user/register">зарегистрируйтесь</a> и вступайте в нашу команду.
        </div>
    </form>
</body>
</html>

 

Тут мы будем выводить ошибки, которые могут возникнуть в процессе регистрации – это неверное заполнение полей, ошибка подключения к базе данных и ошибки которые будут говорить о там, что логин или пароль заняты:

 

Теперь заходим в папку controllers и создаем там новый файл – UserController. Он будет отвечать за страницы, в которых пользователь, так или иначе, взаимодействует со своей учетной записью. Например, это может быть страница регистрации или же личный кабинет.

 

Внутри создаем класс UserController, в котором мы будем писать метод для отрисовки страницы регистрации. Метод будет содержать следующий код:

public function actionRegister()
{
    $index['title'] = 'Регистрация';
    // Объявим переменые, что не возникало ошибок
    $login = false;
    $email = false;
    $password = false;
    // Обработка формы
    if (isset($_POST['submit']))
    {
        $login = $_POST['login'];
        $email = $_POST['email'];
        $password = $_POST['password'];
        if (!User::checkPassword($password)) $errors[] = 'Вы не ввели пароль, пароль меньше 6-х символов';
        if (!User::checkName($login)) $errors[] = 'Логин меньше 3-х символов';
        if (!User::checkEmail($email)) $errors[] = 'Не верно указан E-mail';
        else
        {
            // Проверяем существует ли пользователь
            $checkEmail = User::checkUserEmail($email);
            $checkLogin = User::checkUserLogin($login);
            if ($checkLogin == true) $errors[] = 'Пользователь с таким Логином, уже зарегистрирован, введите другой Логин';
            if ($checkEmail == true) $errors[] = 'Пользователь с таким E-mail, уже зарегистрирован, введите другой E-mail';
            else
            {
                $hashed_password = User::generateHash($password); // Сохраняем Хеш пароля
                if (!User::register($login, $email, $hashed_password)) $errors[] = 'Ошибка Базы Данных';
            }
        }
    }
    // Подключаем вид
    require_once(ROOT . '/views/user/register.php');
    return true;
}

 

Тут мы проверяем все поля на наличие ошибок, если возникает какая-то ошибка, то мы записываем ее в массив errors[]. Проверки осуществляются с помощью функций, которые находятся в модели User.

 

Теперь нужно создать модель User. Для этого заходим в папку models и создаем там новый файл с именем User.php. Внутри файла создаем класс User:

class User
{
}

 

Внутри этого класса создаем функции:

generateHash - функция хеширования пароля. Хеширование осуществляется с помощью функции crypt, которая принимает в себя строку с паролем и соль, которая усложнит созданный пароль.

function generateHash($password) {
    if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
        $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
        return crypt($password, $salt);
    }
}

 

checkName, chekcPassword, checkEmail – это функции, которые проверяет правильность заполнения полей. Логин не должен быть короче двух символов, пароль не короче шести. Электронная почта проверяется на правильность с помощью фильтров вариации данных:

public static function checkName($name)
{
    if (strlen($name) >= 2) return true;
    else return false;
}
public static function checkPassword($password)
{
    if (strlen($password) >= 6) return true;
    else return false;
}

public static function checkEmail($email)
{
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) return true;
    else return false;
}

 

checkUserEmail, checkUserLogin – проверка, нет ли в базе данных введенного в поля логина и адреса электронной почты:

public static function checkUserEmail($email)
{
    $db = Db::getConnection();
    $sql = 'SELECT * FROM users WHERE email = :email';
    $result = $db->prepare($sql);
    $result->bindParam(':email', $email, PDO::PARAM_STR);
    $result->execute();
    $user = $result->fetch();
    if ($user) return true;
    else return false;
}

public static function checkUserLogin($login)
{
    $db = Db::getConnection();
    $sql = 'SELECT * FROM users WHERE login = :login';
    $result = $db->prepare($sql);
    $result->bindParam(':login', $login, PDO::PARAM_STR);
    $result->execute();
    $user = $result->fetch();
    if ($user) return true;
    else return false;
}

 

И сама функция записывающая данные в базу данных – register:

public static function register($login, $email, $password)
{
    $db = Db::getConnection();
    $sql = 'INSERT INTO users (login, email, password) VALUES (:login, :email, :password)';
    // Получение и возврат результатов. Используется подготовленный запрос
    $result = $db->prepare($sql);
    $result->bindParam(':login', $login, PDO::PARAM_STR);
    $result->bindParam(':email', $email, PDO::PARAM_STR);
    $result->bindParam(':password', $password, PDO::PARAM_STR);
    return $result->execute();
}

 

Таким образом мы получаем регистрацию с проверкой полей, которая сигнализирует о допущенных ошибках.

Grai Просмотров сегодня +9 21 июня 2017 команда сайта
Комментарии ( 2 )
gollum
в скрипте UserController.php какая то ошибка Parse error: syntax error, unexpected 'public' (T_PUBLIC) in C:\OSPanel\domains\localhost\controllers\UserController.php on line 2 как поправить???? валидатор ругается на строчку public function actionRegister() { и вопрос по уроку формы для регистрации как я понимаю тут нет?
16.08.2018
hewlett
gollum, все ошибки unexpected расшифровываются как внимательно посмотри на код перед тем, что в кавычках. Скорее всего фигурная скобка.
26.08.2018
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Тег acronym - это акроним

Тег button - это кнопка

Тег article - это статья

Тег applet - это апплет

Как сделать алгоритм поиска по нескольким словам на PHP из БД

Тег abbr - это аббревиатура

Как на MVC и PHP создать систему восстановления доступа с отправкой пароля на адрес электронной почты

Тег base - это базовый адрес

В какие каталоги добавить свой сайт бесплатно

Как создать свою CMS или фреймворк на MVC. Часть Первая

Безопасная авторизация пользователей на MVC и PHP

Тег a - это ссылка

Конструкторы Ugears купить в Иркутске от 690 руб. с Доставкой!
Реклама UGEARS это путешествие в удивительную атмосферу гармонии природы и совершенства конструкторской мысли
Конструктор Навигатор дат - 690 руб.
Конструктор Комбайн - 2990 руб.
ugears-irk.ru
Оплата и Доставка Контакты
Стоматология в Улан-Удэ | ДентаВита | Шок цены от 100 руб!
Реклама От всей нашей семьи хотим выразить огромную благодарность стоматологической клинике
Осмотр, консультация от 150 руб.
Рентгеновский снимок от 100 руб.
dentavita03.ru
Наши цены Отзывы
Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
Создание сайтов от 5 500 руб.
Мобильные приложения от 50 000 руб.
irogex.ru
Наши проекты Контакты
Реклама помогает поддерживать
и развивать наш сервис.


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