# Web Auth (PHP + MySQL)
Минимальная система авторизации для статических HTML‑сайтов с проверкой доступа по алиасам сайтов.
## Возможности
- Авторизация по логину/паролю (PHP + MySQL)
- Сессии с безопасными cookie
- Раздельный доступ по сайтам через алиасы
- Готовый UI для страницы входа
- Скрипт массового импорта пользователей
---
## Структура проекта
```
/
api/
login.php
check_auth.php
logout.php*
config/
db.php
session.php
css/
auth.css*
js/
auth.js
login.html
index.html
import_users.php*
```
> - auth.css - может быть полностью размещен в login.htm
> - import_users.php - для работы не требуется, только для массового добавления пользователей
> - logout.php - в текущей реализации не используется
---
## Требования
- PHP 7.4+ (с модулями `pdo_mysql`)
- MySQL/MariaDB
- Веб‑сервер (Apache/Nginx)
---
## Шаг 1. Создание таблицы пользователей
```sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(64) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
ok5 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,
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;
```
> ok5 o7 o10m o10a webp - используйте в качестве алиасов для сайтов, могут быть любыми, потребуется править код в login.php
```php
$allowedAliases = ['ok5', 'o7', 'o10m', 'o10a', 'webp'];
```
---
## Шаг 2. Настройка подключения к БД
Отредактируйте `config/db.php`:
```php
$host = 'localhost';
$dbname = 'users';
$username = 'root';
$password = '...';
```
---
## Шаг 3. Подключение к сайту
### 1) Добавьте папку `api/`, `js/`, `css/` в корень сайта
Должны быть доступны:
- `/api/login.php`
- `/api/check_auth.php`
- `/api/logout.php`
- `/js/auth.js`
- `/css/auth.css`
### 2) Страница логина
В `login.html` добавьте:
```html
```
`site-alias` — это идентификатор сайта для доступа.
### 3) Защищённые страницы
На любой странице, которую нужно защитить:
```html
```
> Рекомендуется использовать **абсолютные пути** (`/api/...`), если страницы лежат в разных каталогах.
> Незабывайте проверять права на файлы и каталоги добовляемых файлов, если речь об Linux подобных ОС
---
## Шаг 4. Настройка доступа по алиасам
Доступ контролируется через поля в `users`:
- `ok5`, `o7`, `o10m`, `o10a`, `webp`
> 1 - allowed ))
Пример выдачи доступа:
```sql
UPDATE users SET ok5=1, o7=1 WHERE username='ivan';
```
Если доступа нет → при логине будет ошибка `Нет доступа к сайту`.
> Так же доступ можно выдать в phpmyadmin подключившись к БД
---
## Шаг 5. Массовая загрузка пользователей
1) Создайте файл `users.txt` в корне проекта
Формат: **по одному логину в строке**
2) Запустите:
```
php import_users.php
```
3) Результат: `users_with_passwords.txt` (формат `login:password`)
---
## Как применить к любому сайту
1) Скопируйте папки `api/`, `js/`, `css/` в корень сайта.
2) Скопируйте `login.html` и добавьте ``.
3) На защищённых страницах используйте проверку `check_auth.php`.
4) Добавьте пользователей в таблицу `users` и выдайте доступ по нужному алиасу.
---
## Частые проблемы
**Ошибка “Метод не поддерживается”**
→ Запрос идёт GET‑ом. Проверьте, что `auth.js` подключён и форма имеет `id="loginForm"`.
**Ошибка “Не указан сайт”**
→ Нет `site-alias` в `login.html`.
**Ошибка “Could not find driver”**
→ В PHP не включён `pdo_mysql`.
---
Если нужно расширить список алиасов — добавьте колонку в БД и внесите её в список в `api/login.php`.