MV framework logo
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Документация
Скачать .zip версия 3.2.0 от 25.12.2024
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker

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

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

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

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

    protected function beforeCreate($fields)
    {
        $salt = $this -> createPasswordSalt();
        return ["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 ["password" => Service :: makeHash($new_fields["password"].$salt]);
        }
    }

    public function createPasswordSalt()
    {
        $salt = Registry :: get("SecretCode");

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

        return $salt;
    }
}

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

$mvActiveModels = ['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 = [ ... ,

"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.Registry :: get('SecretCode');
    $token .= Debug :: browser().session_id();
        
    return md5($token);
}

public function login($email, $password)
{
    $account = $this -> find(["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 -> find(["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(["email", "password"]);
$form -> useTokenCSRF();

if(!empty($_POST))
{
    $form -> getDataFromPost() -> validate(["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(); 
    
echo $form -> display(["email", "password"]);
echo $form -> displayTokenCSRF();
include $mv -> views_path."main-footer.php";

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

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

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

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

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

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

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

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться