Grewi
* 27.07.2023

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

В системе уже предустановленны необходимые функции, в частности при установке можно создать необходимые таблицы в базе данных. Для авторизации потребуются таблицы users и sessions. Если нужно сделать эти таблицы вручную, то за основу можно взять sql файлы установщика system/install-system/sql. 

Для авторизации пользователя в системе отвечает класс system/core/user/auth.php Основные методы:

  • login - вход пользователя в ситему по логину/почте и паролю
  • aut - выход пользователя
  • status - текущее состояние, возвращает id пользователя или 0, если не авторизован.

В нашем примере форма авторизации будет отправлять post запрос на страницу /auth с полями csrf, login и password. И для начала, создадим контроллер для обработки запроса командой:

php e create/controller user/auth

Будет создан контроллер app/controllers/user/auth.php

Кроме того, нам понадобятся модель таблицы users:

php e create/model users

А в файле роутера app/route/web.php создадим запись:

$route->namespace('app/controllers/user')
$route->post('/auth')->controller('authController', 'index');

Теперь, осталось принять запрос в контроллере:

            $login = new \system\core\user\auth();
            $login->setPass($_POST['pass']);
            $login->setLogin($_POST['login']);
            $login->redirect(referal_url());
            $login->login(function($auth, $user, $valid){
                if($valid->control()){
                    redirect(referal_url());
                }else{
                    redirect(referal_url(), $valid->data(), $valid->error());
                }
            });

В этом примере я продеменстрировал установку параметров класса auth: передал значения логина, пароля и адрес для редиректа. 

Осталось только создать форму в шаблоне:

<form method="post" action="/auth">
    <csrf type="input" name="auth" />
    <input type="text" name="login">
    <input type="password" name="password">
    <input type="submit">
</form>

Вот собственно и всё, мы сделали авторизацию в системе. При желании её можно дополнять и другими функциями.

Grewi 2024