Облако ссылок Добавить сайт Опубликовать Пользователи Категории

Сервис полезной информации


Размещайте полезную информацию и одновременно продвигайте свои проекты.


Узнать больше

Как на 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 Просмотров сегодня +8 21 июня 2017 команда сайта
Реклама помогает поддерживать
и развивать наш сервис.


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