Обновить README.md

This commit is contained in:
2026-01-20 19:42:06 +03:00
parent 760b58ebb8
commit e44a5fa974

331
README.md
View File

@@ -1,161 +1,170 @@
# Web Auth (PHP + MySQL) # Web Auth (PHP + MySQL)
Минимальная система авторизации для статических HTMLсайтов с проверкой доступа по алиасам сайтов. Минимальная система авторизации для статических HTMLсайтов с проверкой доступа по алиасам сайтов.
## Возможности ## Возможности
- Авторизация по логину/паролю (PHP + MySQL) - Авторизация по логину/паролю (PHP + MySQL)
- Сессии с безопасными cookie - Сессии с безопасными cookie
- Раздельный доступ по сайтам через алиасы - Раздельный доступ по сайтам через алиасы
- Готовый UI для страницы входа - Готовый UI для страницы входа
- Скрипт массового импорта пользователей - Скрипт массового импорта пользователей
--- ---
## Структура проекта ## Структура проекта
``` ```
/ /
api/ api/
login.php login.php
check_auth.php check_auth.php
logout.php logout.php*
config/ config/
db.php db.php
session.php session.php
css/ css/
auth.css auth.css*
js/ js/
auth.js auth.js
login.html login.html
index.html index.html
import_users.php import_users.php*
``` ```
> auth.css - может быть полностью размещен в login.html
--- > import_users.php - для работы не требуется, только для массового добавления пользователей
> logout.php - в текущей реализации не используется
## Требования
- PHP 7.4+ (с модулями `pdo_mysql`) ---
- MySQL/MariaDB
- Веб‑сервер (Apache/Nginx) ## Требования
- PHP 7.4+ (с модулями `pdo_mysql`)
--- - MySQL/MariaDB
- Веб‑сервер (Apache/Nginx)
## Шаг 1. Создание таблицы пользователей
---
```sql
CREATE TABLE users ( ## Шаг 1. Создание таблицы пользователей
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(64) NOT NULL UNIQUE, ```sql
password_hash VARCHAR(255) NOT NULL, CREATE TABLE users (
ok5 TINYINT(1) NOT NULL DEFAULT 0, id INT AUTO_INCREMENT PRIMARY KEY,
o7 TINYINT(1) NOT NULL DEFAULT 0, username VARCHAR(64) NOT NULL UNIQUE,
o10m TINYINT(1) NOT NULL DEFAULT 0, password_hash VARCHAR(255) NOT NULL,
o10a TINYINT(1) NOT NULL DEFAULT 0, ok5 TINYINT(1) NOT NULL DEFAULT 0,
webp TINYINT(1) NOT NULL DEFAULT 0 o7 TINYINT(1) NOT NULL DEFAULT 0,
); o10m TINYINT(1) NOT NULL DEFAULT 0,
``` o10a TINYINT(1) NOT NULL DEFAULT 0,
webp TINYINT(1) NOT NULL DEFAULT 0
> Если таблица уже есть, добавьте колонки алиасов: );
```sql ```
ALTER TABLE users
ADD COLUMN ok5 TINYINT(1) NOT NULL DEFAULT 0, > Если таблица уже есть, добавьте колонки алиасов:
ADD COLUMN o7 TINYINT(1) NOT NULL DEFAULT 0, ```sql
ADD COLUMN o10m TINYINT(1) NOT NULL DEFAULT 0, ALTER TABLE users
ADD COLUMN o10a TINYINT(1) NOT NULL DEFAULT 0, ADD COLUMN ok5 TINYINT(1) NOT NULL DEFAULT 0,
ADD COLUMN webp TINYINT(1) NOT NULL DEFAULT 0; ADD COLUMN o7 TINYINT(1) NOT NULL DEFAULT 0,
``` ADD COLUMN o10m TINYINT(1) NOT NULL DEFAULT 0,
ADD COLUMN o10a TINYINT(1) NOT NULL DEFAULT 0,
--- ADD COLUMN webp TINYINT(1) NOT NULL DEFAULT 0;
```
## Шаг 2. Настройка подключения к БД > ok5 o7 o10m o10a webp - используйте в качестве алиасов для сайтов, могут быть любыми, потребуется править код в login.php
Отредактируйте `config/db.php`: ```php
```php $allowedAliases = ['ok5', 'o7', 'o10m', 'o10a', 'webp'];
$host = 'localhost'; ```
$dbname = 'users';
$username = 'root'; ---
$password = '...';
``` ## Шаг 2. Настройка подключения к БД
Отредактируйте `config/db.php`:
--- ```php
$host = 'localhost';
## Шаг 3. Подключение к сайту $dbname = 'users';
$username = 'root';
### 1) Добавьте папку `api/`, `js/`, `css/` в корень сайта $password = '...';
Должны быть доступны: ```
- `/api/login.php`
- `/api/check_auth.php` ---
- `/api/logout.php`
- `/js/auth.js` ## Шаг 3. Подключение к сайту
- `/css/auth.css`
### 1) Добавьте папку `api/`, `js/`, `css/` в корень сайта
### 2) Страница логина Должны быть доступны:
В `login.html` добавьте: - `/api/login.php`
```html - `/api/check_auth.php`
<meta name="site-alias" content="ok5"> - `/api/logout.php`
<link rel="stylesheet" href="css/auth.css"> - `/js/auth.js`
<script src="js/auth.js"></script> - `/css/auth.css`
```
### 2) Страница логина
`site-alias` — это идентификатор сайта для доступа. В `login.html` добавьте:
```html
### 3) Защищённые страницы <meta name="site-alias" content="ok5">
На любой странице, которую нужно защитить: <link rel="stylesheet" href="css/auth.css">
```html <script src="js/auth.js"></script>
<script> ```
async function checkAuth() {
const response = await fetch('/api/check_auth.php', { credentials: 'same-origin' }); `site-alias` — это идентификатор сайта для доступа.
const result = await response.json();
if (!result.isLoggedIn) window.location.href = '/login.html'; ### 3) Защищённые страницы
} На любой странице, которую нужно защитить:
checkAuth(); ```html
</script> <script>
``` async function checkAuth() {
const response = await fetch('/api/check_auth.php', { credentials: 'same-origin' });
> Рекомендуется использовать **абсолютные пути** (`/api/...`), если страницы лежат в разных каталогах. const result = await response.json();
if (!result.isLoggedIn) window.location.href = '/login.html';
--- }
checkAuth();
## Шаг 4. Настройка доступа по алиасам </script>
Доступ контролируется через поля в `users`: ```
- `ok5`, `o7`, `o10m`, `o10a`, `webp`
> Рекомендуется использовать **абсолютные пути** (`/api/...`), если страницы лежат в разных каталогах.
Пример выдачи доступа: > Незабывайте проверять права на файлы и каталоги добовляемых файлов, если речь об Linux подобных ОС
```sql ---
UPDATE users SET ok5=1, o7=1 WHERE username='ivan';
``` ## Шаг 4. Настройка доступа по алиасам
Доступ контролируется через поля в `users`:
Если доступа нет → при логине будет ошибка `Нет доступа к сайту`. - `ok5`, `o7`, `o10m`, `o10a`, `webp`
> 1 - allowed ))
---
Пример выдачи доступа:
## Шаг 5. Массовая загрузка пользователей ```sql
1) Создайте файл `users.txt` в корне проекта UPDATE users SET ok5=1, o7=1 WHERE username='ivan';
Формат: **по одному логину в строке** ```
2) Запустите:
``` Если доступа нет → при логине будет ошибка `Нет доступа к сайту`.
php import_users.php
``` > Так же доступ можно выдать в phpmyadmin подключившись к БД
3) Результат: `users_with_passwords.txt` (формат `login:password`) ---
--- ## Шаг 5. Массовая загрузка пользователей
1) Создайте файл `users.txt` в корне проекта
## Как применить к любому сайту Формат: **по одному логину в строке**
1) Скопируйте папки `api/`, `js/`, `css/` в корень сайта. 2) Запустите:
2) Создайте `login.html` и добавьте `<meta name="site-alias" content="...">`. ```
3) На защищённых страницах используйте проверку `check_auth.php`. php import_users.php
4) Добавьте пользователей в таблицу `users` и выдайте доступ по нужному алиасу. ```
3) Результат: `users_with_passwords.txt` (формат `login:password`)
---
---
## Частые проблемы
**Ошибка “Метод не поддерживается”** ## Как применить к любому сайту
→ Запрос идёт GETом. Проверьте, что `auth.js` подключён и форма имеет `id="loginForm"`. 1) Скопируйте папки `api/`, `js/`, `css/` в корень сайта.
2) Скопируйте `login.html` и добавьте `<meta name="site-alias" content="...">`.
**Ошибка “Не указан сайт”** 3) На защищённых страницах используйте проверку `check_auth.php`.
→ Нет `site-alias` в `login.html` или не обновлён `auth.js`. 4) Добавьте пользователей в таблицу `users` и выдайте доступ по нужному алиасу.
**Ошибка “Could not find driver”** ---
В PHP не включён `pdo_mysql`.
## Частые проблемы
--- **Ошибка “Метод не поддерживается”**
→ Запрос идёт GETом. Проверьте, что `auth.js` подключён и форма имеет `id="loginForm"`.
Если нужно расширить список алиасов — добавьте колонку в БД и внесите её в список в `api/login.php`.
**Ошибка “Не указан сайт”**
→ Нет `site-alias` в `login.html`.
**Ошибка “Could not find driver”**
В PHP не включён `pdo_mysql`.
---
Если нужно расширить список алиасов — добавьте колонку в БД и внесите её в список в `api/login.php`.