Аутентификация на 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() {
unset($_SESSION['user_id']);
}
// проверяем, а зашел ли пользователь на сайт
public function isLoggedIn() {
return isset($_SESSION['user_id']);
}
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)
{
return isset($this->users[$id]) ? $this->users[$id] : null;
}
}
// Пример использования:
// начинаем сессию
session_start();
// создаем классы
$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().
- Сессии используются для хранения идентификатора вошедшего в систему пользователя.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.