Аутентификация на PHP на основе ООП

Аутентификация на 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() {

        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().
  • Сессии используются для хранения идентификатора вошедшего в систему пользователя.
  • Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий