как реализовать аутентификацию и авторизацию в php

Аватар пользователя Nikolai Gagarinov
Nikolai Gagarinov
26 февраля 2025

Разберем разницу между аутентификацией и авторизацией:

  1. Аутентификация - это процесс проверки подлинности пользователя. Пользователь должен предоставить достоверные учетные данные (например, логин и пароль), чтобы доказать свою идентичность.

  2. Авторизация - это процесс определения прав доступа пользователя к определенным ресурсам или действиям в приложении. После успешной аутентификации приложение должно проверить, имеет ли пользователь право на доступ к запрашиваемому ресурсу.

Чтобы все это сделать PHP, можно использовать различные методики:

  1. Сделать самому:

    • Создать базу данных с пользователями и их данными для аутентификации.
    • Создать страницы для входа и регистрации пользователей.
    • При входе проверять введенные пользователем данные и, при успешной проверке, давать доступ к защищенным ресурсам.
    • Для авторизации хранить права доступа пользователя в базе данных и проверять их перед предоставлением доступа.
  2. Взять фреймворк или библиотеку:

    • Laravel, Symfony к примеру

Никогда не храните пароли в открытом виде, всегда используйте хэширование. Также рекомендуется использовать HTTPS для защиты данных, передаваемых между клиентом и сервером.

Создайте таблицу пользователей в вашей базе данных. Простой пример SQL-запроса для её создания:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    role ENUM('user', 'admin') DEFAULT 'user'
);

Регистрация пользователей

Пример регистрации:

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

    // Хеширование пароля
    $hashedPassword = password_hash($password, PASSWORD_BCRYPT);

    // Сохранение пользователя в базе данных
    $sql = "INSERT INTO users (username, password) VALUES (?, ?)";
    // Подключение к базе данных и выполнение запроса
}

Форма:

```html
<form method="POST" action="/register">
    <label>Username</label>
    <input type="text" name="username" required>
    <label>Password</label>
    <input type="password" name="password" required>
    <button type="submit">Register</button>
</form>

Аутентификация

Делаем форму входа, которая будет принимать имя пользователя и пароль, проверять их и устанавливать сессии.

<?php
session_start();

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

    // Получение пользователя из базы данных
    $sql = "SELECT * FROM users WHERE username = ?";
    // Подключение к базе данных и выполнение запроса
    // $user = выполнить запрос и получить данные пользователя

    if ($user && password_verify($password, $user['password'])) {
        // Успешная аутентификация
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['role'] = $user['role'];
        // делаем редирект
    } else {
        // "Неверные имя пользователя или пароль!"
    }
}
<form method="POST">
    <label>Username</label>
    <input type="text" name="username" required>
    <label>Password</label>
    <input type="password" name="password" required>
    <button type="submit">Login</button>
</form>

Авторизация

Теперь, когда пользователь аутентифицирован, можно контролировать доступ к различным частям приложения.

function isAuthenticated()
{
    return isset($_SESSION['user_id']);
}

function hasRole($role)
{
    return isset($_SESSION['role']) && $_SESSION['role'] === $role;
}

Пример контроля доступа к защищённой странице:

<?php
session_start();

if (!isAuthenticated()) {
    // что-то показываем
    exit();
}

if (!hasRole('admin')) {
    // "У вас нет доступа к этой странице.";
    exit();
}

// Код для отображения защищённой информации

Выход из системы

<?php
session_start();
session_destroy();
// делаем редирект
0 0
Познакомьтесь с основами PHP бесплатно