Аутентификация на PHP на основе ООП
Сегодня мы рассмотрим с Вами пример реализаци простой системы аутентификации в PHP
Доброго времени суток! Сегодня мы рассмотрим с Вами пример реализаци простой системы аутентификации в PHP, организованной с помощью концепций ООП. У нас будут два класса: сервис - AuthService, который будет отвечать за логику аутентификации и класс репозитория UserRepository, который будет отвечать за логику извлечение данных о пользователе (в нашем примере это будет простой список в классе, но в реальности это некототорое хранилище - база данных, например)
<?php class AuthService { protected UserRepository $userRepository; public function __construct(UserRepository $userRepository) { $this->userRepository = $userRepository; } // kj public function login($username, $password) { $user = $this->userRepository->getUserByUsername($username); if ($user && password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; return true; } return false; } // удалаем сесссию public function logout() { } // проверяем, а зашел ли пользователь на сайт public function isLoggedIn() { } public function getCurrentUser() { if ($this->isLoggedIn()) { return $this->userRepository->getUserById($_SESSION['user_id']); } return null; } } class UserRepository { protected $users = [ 1 => ['id' => 1, 'username' => 'myrusakov', 'password' => '$2y$10$1XvZnO1UFf/6JlmzDgSPSeP2V0bQDyZLFiBz75bZv.5x63vNBY1o6'], // Пароль 'password' 2 => ['id' => 2, 'username' => 'myrusakov2', 'password' => '$2y$10$amUgTC8HBk7aMUuFAK.uoONfsvhZwGpC1kDDvJb9WwvfnbXF4X8BO'], // Пароль 'password123' ]; public function getUserByUsername($username) { foreach ($this->users as $user) { if ($user['username'] === $username) { return $user; } } return null; } public function getUserById($id) { } } // Пример использования: // начинаем сессию // создаем классы $userRepository = new UserRepository(); $authService = new AuthService($userRepository); // Пример входа на сайт $username = 'myrusakov'; $password = 'password'; if ($authService->login($username, $password)) { echo "Вход выполнен успешно! Добро пожаловать, {$authService->getCurrentUser()['username']}!"; } else { echo "Неверное имя пользователя или пароль."; } // Проверка статуса входа - залогинен ли пользователь if ($authService->isLoggedIn()) { echo "Пользователь вошел в систему."; } else { echo "Пользователь не вошел в систему."; } // Пример выхода $authService->logout(); echo "Пользователь вышел из системы.";
Таким образом, в коде выше:
AuthService обрабатывает логику входа на сайт, выхода и проверку статуса входа.
- UserRepository обрабатывает получение данных пользователя.
Пароли хешируются с помощью
- password_hash() и сохраняются в базе данных. При проверке паролей используется password_verify().
- Сессии используются для хранения идентификатора вошедшего в систему пользователя.