Доброго времени суток. Есть самописный mvc, аутентифицированный пользователь раньше хранился в сессии (массив со всеми данными, в т.ч email и пароль (md5)), сейчас вынес в класс с той же идеей, только каждый раз, например, при отображении шапки сайта с логином юзера, создается новый объект этого класса с запросом к бд. Так как проект учебный и количество запросов соответствующее, это не критично, однако понимаю, что это далеко не лучшая реализация аутентификации + ко всему достаточно тяжело тестировать классы, которые обращаются к UserAuth, требующий id из сессии. Подскажите, пожалуйста, наиболее оптимальное решение данного вопроса, заранее спасибо!
P.S.По поводу кода:
Класс UserAuth:
<?php
namespace App\Models;
class UserAuth extends Model
{
public $id, $data = [];
public function __construct()
{
parent::__construct();
if ($_SESSION['user_id']) {
$this->id = $_SESSION['user_id'];
} else if ($_COOKIE['remember_token']) {
$this->id = $this->getUserIdByToken($_COOKIE['remember_token']);
$_SESSION['user_id'] = $this->id;
}
$user = $this->getUserInfo();
$this->data =
['id' => $user['id'], 'login' => $user['login'],
'password' => $user['password'], 'name' => $user['name'],
'email' => $user['email'], 'surname' => $user['surname'],
'city_id' => $user['city_id'], 'status_id' => $user['status_id'],
'ban_status' => $user['ban_status'], 'registration_time' => $user['registration_time'],
'updated_at' => $user['updated_at'], 'active' => $user['active'],
'city_name' => $user['city'], 'avatar' => $user['avatar']];
}
/**
* Get left join query with user info (from 'users', 'names', 'surnames' and 'cities')
* @return array
*/
private function getUserInfo(): array
{
// Здесь код, который обращается к БД через ПДО и записывает в свойство data массив через fetch()
}
private function getUserIdByToken(string $token): string
{
// Здесь код, который обращается к БД через ПДО и записывает id пользователя, найденный через токен
}
}
Пример использования такого объекта:
<header>
<div class="main__title"><a href="/">Главная страница</a></div>
<?php if ($_SESSION['userauth']): ?>
<div class="user"><a href="/user"><?= (new UserAuth)->data['login'] ?></a></div>
<div class="logout"><a href="/logout">Выйти</a></div>
<div class="addlot__link"><a href="/addlot">Добавить лот</a></div>
<?php else: ?>
<div class="login"><a href="/login">Войти</a></div>
<div class="registration"><a href="/registration">Зарегистрироваться</a></div>
<?php endif; ?>
</header>