Комплексный проект, демонстрирующий 11 различных методов авторизации в Laravel, включая внутренние механизмы и бесплатные OAuth провайдеры (в том числе российские).
- Реализованные методы авторизации
- Требования
- Быстрый старт
- Подробная установка
- Настройка OAuth провайдеров
- Настройка Email
- Использование
- Структура проекта
- База данных
- Тестирование
- Безопасность
- Лицензия
-
✅ Email/Password (Laravel Breeze)
- Стандартная регистрация с email и паролем
- Восстановление забытого пароля
- Bcrypt хеширование (12 rounds)
-
✅ Email Verification
- Подтверждение email адреса при регистрации
- Защита маршрутов через middleware
verified - Повторная отправка письма подтверждения
-
✅ Remember Me
- Функция "Запомнить меня" для длительных сессий
- Secure cookie на 400 дней
- Чекбокс на странице входа
-
✅ Two-Factor Authentication (2FA/TOTP)
- Двухфакторная аутентификация с Google Authenticator / Authy
- Генерация QR-кода для настройки
- Проверка 6-значного TOTP кода
- 8 одноразовых recovery кодов для восстановления доступа
- Возможность включения/выключения в профиле
-
✅ Magic Link
- Вход без пароля по одноразовой ссылке из email
- Ссылка действительна 30 минут
- Автоматический вход при переходе по ссылке
- Защита от повторного использования
-
✅ Google OAuth
- Авторизация через Google аккаунт
- Получение имени, email, аватара
- Автоматическая верификация email
-
✅ GitHub OAuth
- Авторизация через GitHub аккаунт
- Получение username, email, аватара
- Идеально для разработчиков
-
✅ Facebook OAuth
- Авторизация через Facebook аккаунт
- Получение имени, email, аватара
- Международная социальная сеть
-
✅ VKontakte (VK) OAuth
- Авторизация через ВКонтакте
- Российская социальная сеть
- Бесплатный API
-
✅ Yandex OAuth
- Авторизация через Яндекс
- Российский поисковик и портал
- Получение email и аватара
-
✅ Mail.ru OAuth
- Авторизация через Mail.ru
- Российский email провайдер
- Интеграция с социальной сетью
- PHP: 8.3 или выше
- Composer: последняя версия
- MySQL: 5.7 или выше
- Node.js: 20.19+ или 22.12+
- npm: последняя версия
Минимальная настройка для локального запуска (5 минут):
mysql -u root -p
CREATE DATABASE different_auths CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;# Composer зависимости
composer install
# NPM зависимости
npm install# Скопируйте .env.example в .env (если не сделано автоматически)
cp .env.example .env
# Отредактируйте параметры базы данных
nano .envОбновите следующие строки:
DB_DATABASE=different_auths
DB_USERNAME=root
DB_PASSWORD=ваш_пароль# Генерация ключа приложения
php artisan key:generate
# Запуск миграций
php artisan migratenpm run buildphp artisan serveОткройте браузер: http://localhost:8000
Используйте скрипт для автоматической установки:
chmod +x COMMANDS.sh
./COMMANDS.sh# 1. Клонирование репозитория (если применимо)
git clone <repository-url>
cd different_auths
# 2. Установка Composer зависимостей
composer install
# 3. Установка NPM зависимостей
npm install
# 4. Создание .env файла
cp .env.example .env
# 5. Генерация ключа
php artisan key:generate
# 6. Настройка базы данных в .env
# Отредактируйте DB_DATABASE, DB_USERNAME, DB_PASSWORD
# 7. Создание базы данных
mysql -u root -p
CREATE DATABASE different_auths;
EXIT;
# 8. Запуск миграций
php artisan migrate
# 9. Сборка frontend
npm run build
# 10. Очистка кеша
php artisan cache:clear
php artisan config:clear
# 11. Запуск сервера
php artisan serveДля работы OAuth авторизации необходимо получить Client ID и Client Secret для каждого провайдера.
- Перейдите в Google Cloud Console
- Создайте новый проект или выберите существующий
- Перейдите в "APIs & Services" → "Credentials"
- Нажмите "Create Credentials" → "OAuth 2.0 Client ID"
- Настройте OAuth consent screen (если требуется)
- Выберите "Web application"
- Добавьте Authorized redirect URIs:
http://localhost:8000/auth/google/callback - Скопируйте Client ID и Client Secret
- Добавьте в
.env:
GOOGLE_CLIENT_ID=ваш_client_id
GOOGLE_CLIENT_SECRET=ваш_client_secret
GOOGLE_REDIRECT_URL=http://localhost:8000/auth/google/callback- Перейдите в GitHub Developer Settings
- Нажмите "New OAuth App"
- Заполните форму:
- Application name: Different Auths
- Homepage URL: http://localhost:8000
- Authorization callback URL:
http://localhost:8000/auth/github/callback
- Нажмите "Register application"
- Скопируйте Client ID
- Сгенерируйте Client Secret
- Добавьте в
.env:
GITHUB_CLIENT_ID=ваш_client_id
GITHUB_CLIENT_SECRET=ваш_client_secret
GITHUB_REDIRECT_URL=http://localhost:8000/auth/github/callback- Перейдите в Facebook Developers
- Создайте новое приложение
- Выберите тип "Consumer"
- Добавьте продукт "Facebook Login"
- В настройках Facebook Login добавьте Valid OAuth Redirect URIs:
http://localhost:8000/auth/facebook/callback - В Settings → Basic скопируйте App ID и App Secret
- Добавьте в
.env:
FACEBOOK_CLIENT_ID=ваш_app_id
FACEBOOK_CLIENT_SECRET=ваш_app_secret
FACEBOOK_REDIRECT_URL=http://localhost:8000/auth/facebook/callback- Перейдите в VK Developers
- Создайте приложение
- Выберите тип "Веб-сайт"
- Укажите адрес сайта: http://localhost:8000
- В настройках добавьте Authorized redirect URI:
http://localhost:8000/auth/vkontakte/callback - Включите доступ к email в разделе "Права доступа"
- Скопируйте ID приложения и Защищённый ключ
- Добавьте в
.env:
VKONTAKTE_CLIENT_ID=ваш_app_id
VKONTAKTE_CLIENT_SECRET=ваш_secure_key
VKONTAKTE_REDIRECT_URL=http://localhost:8000/auth/vkontakte/callback- Перейдите в Yandex OAuth
- Нажмите "Зарегистрировать новое приложение"
- Заполните форму:
- Название: Different Auths
- Платформы: Веб-сервисы
- Callback URI:
http://localhost:8000/auth/yandex/callback
- В разделе "Доступ к данным" отметьте:
- Доступ к email адресу
- Доступ к аватару
- Доступ к логину
- Создайте приложение
- Скопируйте ID и Пароль
- Добавьте в
.env:
YANDEX_CLIENT_ID=ваш_client_id
YANDEX_CLIENT_SECRET=ваш_client_secret
YANDEX_REDIRECT_URL=http://localhost:8000/auth/yandex/callback- Перейдите в Mail.ru OAuth
- Создайте новое приложение
- Заполните форму:
- Название: Different Auths
- Redirect URI:
http://localhost:8000/auth/mailru/callback
- В разделе "Права доступа" отметьте нужные права
- Создайте приложение
- Скопируйте ID и Secret
- Добавьте в
.env:
MAILRU_CLIENT_ID=ваш_client_id
MAILRU_CLIENT_SECRET=ваш_client_secret
MAILRU_REDIRECT_URL=http://localhost:8000/auth/mailru/callbackДля работы Magic Link и Email Verification требуется настройка отправки email.
Письма будут сохраняться в лог файл storage/logs/laravel.log:
MAIL_MAILER=logПросмотр писем в реальном времени:
tail -f storage/logs/laravel.log- Зарегистрируйтесь на Mailtrap.io
- Создайте новый inbox
- Скопируйте SMTP credentials
- Добавьте в
.env:
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=ваш_username
MAIL_PASSWORD=ваш_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"Для production используйте настоящий SMTP сервер:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=ваш_email@gmail.com
MAIL_PASSWORD=ваш_пароль_приложения
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@yourdomain.com"
MAIL_FROM_NAME="${APP_NAME}"После запуска сервера доступны следующие страницы:
- / - Главная страница
- /register - Регистрация нового пользователя
- /login - Страница входа
- /dashboard - Личный кабинет (требует авторизацию)
- /profile - Редактирование профиля
- /2fa/enable - Включение двухфакторной аутентификации
- /magic-link - Запрос magic link для входа
- /auth/google - Авторизация через Google
- /auth/github - Авторизация через GitHub
- /auth/facebook - Авторизация через Facebook
- /auth/vkontakte - Авторизация через VK
- /auth/yandex - Авторизация через Yandex
- /auth/mailru - Авторизация через Mail.ru
- Зарегистрируйтесь или войдите в систему
- Перейдите в Dashboard
- Нажмите кнопку "Enable 2FA"
- Установите Google Authenticator на телефон:
- Отсканируйте QR-код приложением или введите секретный ключ вручную
- Введите 6-значный код из приложения для подтверждения
- ВАЖНО: Сохраните recovery коды в безопасном месте!
При следующем входе после ввода email/пароля система запросит 2FA код.
- На странице входа нажмите "Login with Magic Link"
- Введите ваш email адрес
- Проверьте почту (или лог файл, если используете log driver)
- Перейдите по ссылке из письма
- Вы автоматически войдёте в систему
Ссылка действительна 30 минут и может быть использована только один раз.
- На странице входа нажмите на кнопку нужного провайдера (Google, GitHub и т.д.)
- Вы будете перенаправлены на страницу провайдера
- Войдите в аккаунт провайдера (если не авторизованы)
- Разрешите доступ приложению
- Вы будете автоматически перенаправлены обратно и войдёте в систему
Если аккаунт с таким email уже существует, OAuth будет привязан к существующему аккаунту.
app/Http/Controllers/Auth/
├── AuthenticatedSessionController.php # Вход/выход (модифицирован для 2FA)
├── RegisteredUserController.php # Регистрация (Breeze)
├── PasswordResetLinkController.php # Восстановление пароля (Breeze)
├── SocialAuthController.php # OAuth авторизация (новый)
├── TwoFactorController.php # 2FA управление (новый)
└── MagicLinkController.php # Magic Link авторизация (новый)
app/Models/
├── User.php # Расширен для OAuth и 2FA
└── MagicLink.php # Модель magic links (новая)
database/migrations/
├── *_create_users_table.php # Стандартная
├── *_add_oauth_and_2fa_fields_to_users_table.php # OAuth + 2FA поля
└── *_create_magic_links_table.php # Magic links таблица
resources/views/
├── auth/
│ ├── login.blade.php # Страница входа (модифицирована)
│ ├── register.blade.php # Регистрация (Breeze)
│ ├── two-factor/
│ │ ├── enable.blade.php # Включение 2FA
│ │ ├── challenge.blade.php # Ввод 2FA кода
│ │ └── recovery-codes.blade.php # Показ recovery кодов
│ └── magic-link/
│ └── request.blade.php # Запрос magic link
├── emails/
│ └── magic-link.blade.php # Email шаблон magic link
└── dashboard.blade.php # Dashboard (модифицирован)
config/
└── services.php # OAuth credentials (модифицирован)
CREATE TABLE users (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
email_verified_at TIMESTAMP NULL,
password VARCHAR(255) NOT NULL,
remember_token VARCHAR(100) NULL,
-- OAuth поля
oauth_provider VARCHAR(255) NULL, -- google, github, facebook, vkontakte, yandex, mailru
oauth_id VARCHAR(255) NULL,
oauth_token TEXT NULL,
oauth_refresh_token TEXT NULL,
avatar VARCHAR(255) NULL,
-- 2FA поля
google2fa_enabled BOOLEAN DEFAULT FALSE,
google2fa_secret VARCHAR(255) NULL,
google2fa_recovery_codes TEXT NULL, -- JSON array
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL,
INDEX idx_oauth (oauth_provider, oauth_id)
);CREATE TABLE magic_links (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) NOT NULL,
token VARCHAR(255) NOT NULL UNIQUE,
expires_at TIMESTAMP NOT NULL,
used_at TIMESTAMP NULL,
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL,
INDEX idx_email (email),
INDEX idx_token (token)
);# 1. Запустите сервер
php artisan serve
# 2. Откройте http://localhost:8000/register
# 3. Зарегистрируйте пользователя
# 4. Проверьте email верификацию в логах:
tail -f storage/logs/laravel.log
# 5. Войдите в систему через /login# 1. Войдите в систему
# 2. Откройте /dashboard
# 3. Нажмите "Enable 2FA"
# 4. Отсканируйте QR-код
# 5. Введите код из Google Authenticator
# 6. Сохраните recovery коды
# 7. Выйдите и войдите снова - потребуется 2FA код# 1. Откройте /magic-link
# 2. Введите email
# 3. Проверьте лог:
tail -f storage/logs/laravel.log | grep -A 20 "Magic"
# 4. Скопируйте ссылку и откройте в браузере
# 5. Вы автоматически войдёте# 1. Настройте OAuth credentials в .env
# 2. Откройте /login
# 3. Нажмите на кнопку нужного провайдера
# 4. Авторизуйтесь у провайдера
# 5. Разрешите доступ
# 6. Вы будете перенаправлены обратно# Список всех маршрутов авторизации
php artisan route:list --path=auth
php artisan route:list --path=2fa
php artisan route:list --path=magic-linkmysql -u root -p different_auths
# Проверка пользователей
SELECT id, name, email, oauth_provider, google2fa_enabled FROM users;
# Проверка magic links
SELECT email, created_at, expires_at, used_at FROM magic_links ORDER BY created_at DESC;- CSRF защита - Все формы защищены CSRF токенами
- Bcrypt хеширование - Пароли хешируются с 12 rounds
- Rate Limiting - Защита от брутфорса на странице входа
- Email Verification - Обязательная верификация email
- 2FA с TOTP - Стандартный TOTP алгоритм (RFC 6238)
- Recovery коды - Одноразовые коды для восстановления доступа
- Magic Link - Одноразовые токены с истечением (30 минут)
- OAuth токены - Безопасное хранение, скрыты в API ответах
- Session Security - Secure cookies, session regeneration
- SQL Injection - Защита через Eloquent ORM и prepared statements
- XSS - Защита через Blade template engine
- HTTPS обязателен - Используйте SSL сертификат
- Смените APP_KEY - Используйте уникальный ключ
- Отключите DEBUG - Установите
APP_DEBUG=false - Настройте firewall - Ограничьте доступ к БД
- Логирование - Настройте мониторинг логов
- Backup - Регулярное резервное копирование БД
- OAuth Redirect URLs - Используйте production домены
- Rate Limiting - Настройте более строгие лимиты
- 2FA обязателен - Для администраторов обязательно
- Обновления - Регулярно обновляйте зависимости
{
"require": {
"php": "^8.3",
"laravel/framework": "^12.44",
"laravel/breeze": "^2.3",
"laravel/socialite": "^5.24",
"socialiteproviders/vkontakte": "^5.1",
"socialiteproviders/yandex": "^4.1",
"socialiteproviders/mailru": "^4.1",
"pragmarx/google2fa-laravel": "^2.3"
}
}- laravel/framework - Laravel framework
- laravel/breeze - Стартовый набор для авторизации
- laravel/socialite - OAuth провайдеры (Google, GitHub, Facebook)
- socialiteproviders/vkontakte - VK OAuth провайдер
- socialiteproviders/yandex - Yandex OAuth провайдер
- socialiteproviders/mailru - Mail.ru OAuth провайдер
- pragmarx/google2fa-laravel - Google 2FA (TOTP)
- Framework: Blade Templates
- CSS: Tailwind CSS
- Компоненты: Laravel Breeze UI Components
- Адаптивный дизайн: Полностью responsive
- Темная тема: Не реализована (можно добавить)
- Страница входа с OAuth кнопками
- Страница регистрации
- Dashboard с управлением 2FA
- Страница включения 2FA с QR-кодом
- Страница recovery кодов
- Страница 2FA challenge
- Страница запроса Magic Link
- Страница профиля
Проблема: could not find driver (Connection: sqlite)
Решение: Проект настроен на MySQL. Убедитесь, что MySQL запущен и параметры в .env корректны.
Проблема: Ошибка при OAuth авторизации
Решение:
- Проверьте Client ID и Secret в
.env - Убедитесь, что callback URL совпадает с настройками у провайдера
- Проверьте, что провайдер зарегистрирован в
AppServiceProvider
Проблема: Email с magic link не приходит
Решение:
- Проверьте настройки MAIL_* в
.env - Если используете log driver, проверьте
storage/logs/laravel.log - Убедитесь, что пользователь с таким email существует
Проблема: Пустая страница или ошибка при включении 2FA
Решение:
# Проверьте, установлен ли пакет
composer show pragmarx/google2fa-laravel
# Если нет, установите
composer require pragmarx/google2fa-laravel
# Очистите кеш
php artisan cache:clear
php artisan config:clearПроблема: Ошибки при запуске php artisan migrate
Решение:
# Откатите миграции
php artisan migrate:rollback
# Очистите БД
php artisan db:wipe
# Запустите заново
php artisan migrate# Просмотр логов
tail -f storage/logs/laravel.log
# Очистка кеша
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Проверка маршрутов
php artisan route:list
# Проверка миграций
php artisan migrate:status
# Создание нового пользователя через tinker
php artisan tinker
> User::create(['name' => 'Test', 'email' => 'test@example.com', 'password' => bcrypt('password'), 'email_verified_at' => now()]);Laravel документация:
OAuth провайдеры:
Пакеты:
- Email/Password регистрация
- Email/Password вход
- Email Verification (через логи)
- Remember Me
- Восстановление пароля
- 2FA с Google Authenticator
- Magic Link (через логи)
- Google OAuth (нужен Client ID/Secret)
- GitHub OAuth (нужен Client ID/Secret)
- Facebook OAuth (нужен Client ID/Secret)
- VK OAuth (нужен Client ID/Secret)
- Yandex OAuth (нужен Client ID/Secret)
- Mail.ru OAuth (нужен Client ID/Secret)
- Real Email (нужен SMTP сервер)
Этот проект создан в образовательных целях и распространяется под MIT лицензией.
Проект создан для демонстрации различных методов авторизации в Laravel 12.
Технологии: Laravel 12, PHP 8.3, MySQL, Tailwind CSS, Blade Templates
Дата создания: Декабрь 2025
- Laravel Framework Team
- Laravel Breeze Team
- Laravel Socialite Team
- SocialiteProviders Community
- PragmaRX Google2FA
Начните с быстрого старта выше ↑ или изучите структуру проекта для понимания архитектуры.