MV framework logo
  • Архитектура
    • Философия
    • Технологии
    • CMF
    • История версий
  • Админ панель
  • Поддержка
  • Обратная связь
  • Примеры кода
    • Новостная лента
    • Слайдер с баннерами
    • Список с фильтрацией
    • Форма с загрузкой файла
    • AJAX форма на jQuery
    • Вопросы и ответы
    • Каталог с товарами
    • Авторизация пользователя
    • Регистрация пользователя
    • Личный кабинет пользователя
Скачать Версия 2.4 от 14.07.2020
Документация
  • Архитектура
    • Философия
    • Технологии
    • CMF
    • История версий
  • Админ панель
  • Поддержка
  • Обратная связь
  • Примеры кода
    • Новостная лента
    • Слайдер с баннерами
    • Список с фильтрацией
    • Форма с загрузкой файла
    • AJAX форма на jQuery
    • Вопросы и ответы
    • Каталог с товарами
    • Авторизация пользователя
    • Регистрация пользователя
    • Личный кабинет пользователя
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
Модели (models)
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны (views) и маршрутизация (routes)
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Index, default и 404 шаблоны
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Правила проверки полей формы
  • Проверка полей формы
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
  • Загрузка из csv файлов
Сессии и безопасность
  • Работа с сессиями
  • AJAX
  • Кэширование
  • Безопасность
  • Отладка
Плагины
  • Общие принципы плагинов
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
Модели (models)
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны (views) и маршрутизация (routes)
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Index, default и 404 шаблоны
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Правила проверки полей формы
  • Проверка полей формы
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
  • Загрузка из csv файлов
Сессии и безопасность
  • Работа с сессиями
  • AJAX
  • Кэширование
  • Безопасность
  • Отладка
Плагины
  • Общие принципы плагинов
  • Дополнения к административной панели

Авторизация пользователя

Создаем файл модели models/accounts.model.php, а также включаем работу с сессиями в файле config/setup.php и там же задаем секретный ключ в поле 'SecretCode'

<?
class Accounts extends Model
{
    protected $name = "Аккаунты";

    protected $model_elements = array(
        array("Активировать", "bool", "active", array("on_create" => true)),
        array("Дата регистрации", "date_time", "date_registration"),
        array("Дата последнего посещения", "date_time", "date_last_visit", array("now_on_create" => false)),
        array("Имя", "char", "name", array("required" => true)),
        array("Email", "email", "email", array("required" => true, "unique" => true)),
        array("Пароль", "password", "password", array("required" => true, "letters_required" => true,
                                                      "digits_required" => true)),
        array("Телефон", "phone", "phone")
    );

    protected function beforeCreate($fields)
    {
        $salt = $this -> createPasswordSalt();
        return array("password" => Service :: makeHash($fields["password"].$salt));
    }

    protected function beforeUpdate($id, $old_fields, $new_fields)
    {
        if($new_fields["password"] != $old_fields["password"])
        {
            $salt = $this -> createPasswordSalt();
            return array("password" => Service :: makeHash($new_fields["password"].$salt));
        }
    }

    public function createPasswordSalt()
    {
        $salt = $this -> registry -> getSetting("SecretCode");

        //Здесь можно добавить к переменной $salt еще строку
        //например $salt .= "hg3HgLi826gfvd)jsh";

        return $salt;
    }
}
?>

Вносим название модели в файл config/models.php

$mvActiveModels = array('pages', 'blocks', ... , 'accounts');

Создаем SQL таблицу в базе данных, после чего модель может работать в административной панели

CREATE TABLE `accounts` (
  `id` int(11) NOT NULL,
  `active` tinyint(4) NOT NULL,
  `date_registration` datetime NOT NULL,
  `date_last_visit` datetime NOT NULL,
  `name` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `phone` varchar(30) NOT NULL,
  `password` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `accounts` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `id_active` (`id`,`active`);
ALTER TABLE `accounts` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Создаем файл шаблона views/view-login.php и вносим маршрут к шаблону в файл config/routes.php

$mvFrontendRoutes = array( ... ,

"login/" => "view-login.php",
);

Создаем файл views/main-index-include.php для автоматического определения авторизованного пользователя на каждой странице фронтенда с таким содержимым

<?
$account = $mv -> accounts -> checkAuthorization();
?>

Включаем файл main-index-include.php в корневой файл index.php перед подключением шаблона

<?
$mv = new Builder();

include_once $mv -> views_path."main-index-include.php";

include_once $mv -> router -> defineRoute();
?>

Добавляем методы в модель Accounts

<?
public function generateSessionToken($account)
{
    $token = $account -> id.$this -> registry -> getSetting('SecretCode');
    $token .= Debug :: browser().session_id();
        
    return md5($token);
}

public function login($email, $password)
{
    $account = $this -> findRecord(array("email" => $email, "active" => 1));
    $salt = $this -> createPasswordSalt();
        
    if($account && Service :: checkHash($password.$salt, $account -> password))
    {
        $_SESSION["account"]["id"] = $account -> id;
        $_SESSION["account"]["password"] = md5($account -> password);
        $_SESSION["account"]["token"] = $this -> generateSessionToken($account);
            
        $account -> date_last_visit = I18n :: getCurrentDateTime();
        $account -> update();         
            
        return $account;
    }
}
   
public function checkAuthorization()
{
    if(isset($_SESSION["account"]["id"], $_SESSION["account"]["password"], $_SESSION["account"]["token"]))
    {
        $account = $this -> findRecord(array("id" => $_SESSION["account"]["id"], "active" => 1));
            
        if($account && $_SESSION["account"]["password"] == md5($account -> password))
            if($_SESSION["account"]["token"] == $this -> generateSessionToken($account))
                return $account;
    }
}
?>

Содержимое файла шаблона views/view-login.php

<?
$form = new Form("Accounts");
$form -> setRequiredFields(array("email", "password"));
$form -> useTokenCSRF();

if(!empty($_POST))
{
    $form -> getDataFromPost() -> validate(array("email", "password"));
    
    if($form -> isValid())
        if(!$account = $mv -> accounts -> login($form -> email, $form -> password))
            $form -> addError("Неверный email или пароль.");
        else
            $mv -> redirect("home/"); //Переход на нужный нам URL

    $form -> password = "";
}

include $mv -> views_path."main-header.php";
?>
    <? echo $form -> displayErrors(); ?>
    <form method="post" action="<? echo $mv -> root_path; ?>login/">
        <table>
            <? echo $form -> display(array("email", "password")); ?>
        </table>
        <div class="form-buttons">
            <? echo $form -> displayTokenCSRF(); ?>
            <input type="submit" value="Вход" />
        </div>
    </form>
<?
include $mv -> views_path."main-footer.php";
?>

Теперь на любой странице сайта можно проверить есть ли на сайте авторизованный пользователь

<?
if($account) //Есть авторизованный пользователь
{
    echo $account -> name;
}

//Если страница закрыта авторизацией, то отправляем на логин
if(!$account)
    $mv -> redirect("login/");
?>

Предыдущий раздел

Каталог с товарами

Следующий раздел

Регистрация пользователя

© 2012-2021, MV framework team

English Лицензия

Поделиться