Реализация аутентификации в PHP с примерами кода

Вот несколько методов реализации аутентификации с использованием PHP, а также примеры кода:

Метод 1: базовая аутентификация
Этот метод использует базовую аутентификацию HTTP, при которой имя пользователя и пароль передаются в заголовке «Авторизация» HTTP-запроса.

<?php
$username = $_SERVER['PHP_AUTH_USER'] ?? '';
$password = $_SERVER['PHP_AUTH_PW'] ?? '';
if ($username === 'admin' && $password === 'password') {
    // Authentication successful
    echo "Welcome, admin!";
} else {
    // Authentication failed
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo "Authentication required";
    exit;
}
?>

Метод 2. Аутентификация на основе форм.
В этом методе используется форма входа, в которой пользователь вводит свое имя пользователя и пароль, которые затем отправляются на сервер для проверки.

<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';

    // Verify username and password
    if ($username === 'admin' && $password === 'password') {
        // Authentication successful
        $_SESSION['username'] = $username;
        echo "Welcome, admin!";
    } else {
        // Authentication failed
        echo "Invalid username or password";
    }
}
?>

Метод 3. Аутентификация на основе базы данных
Этот метод предполагает сохранение учетных данных пользователя в базе данных и их сравнение в процессе аутентификации.

<?php
// Assuming a database connection is already established
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// Retrieve user from the database
$query = "SELECT * FROM users WHERE username = ?";
$stmt = $pdo->prepare($query);
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
    // Authentication successful
    echo "Welcome, " . $user['username'] . "!";
} else {
    // Authentication failed
    echo "Invalid username or password";
}
?>