Наш пакет предоставляет удобный способ работы с авторизацией для вашего сайта с использованием Laravel Socialite. Так же есть и интегривованная альтернативная регистрация и авторизация через обычную форму. Простая интеграция позволяет быстро подключить необходимые провайдеры и использовать их. Расширенная кастомизация позволяет гибко настроить функционал под ваш проект без особых изменений.
Основные требования для установки и корректной работы:
PHP>= 8.0Laravel>= 10.x || 11.xComposer>= 2.4.x
Для установки пакета необходимо выполнить команды:
- composer require sashagm/social
- php artisan socials:install
- Для начала давайте определим нашу вспомогательную конфигурацию в
/config/socials.php:
'admin_prefix' => '', // Префикс для маршрутов
'isActive' => true, // Доступ авторизации
'isProvider' => true, // Проверка провайдера( запрет на использование одинаковых email)
'isLoginForm' => true, // Разрешать авторизовываться через обычную форму
'user' => [
'table' => 'users', // Таблица пользователей
'avatar' => "img", // Поле для аватарок
'pass_colum' => "password", // Поле пароля
'table_after' => "password", // После какого поля будут добавлены новые поля
'access_colum' => 'isBanned', // Поле для учета блокировки/группа или роль
'access_value' => 1, // Какое значение необходимо получить чтобы заблокировать доступ
'name_colum' => 'name', // Поле для логина
'email_colum' => 'email', // Поле для почты
'auto_update' => true, // Разрешить пользователям обновлять данные от провайдеров
'update_colum' => 'isUpdate', // Поле для обновлений данных
'getAvatar' => true, // Использовать аватарку пользователя из провайдера социальной сети
'defaultAvatar' => '/path/to/default/avatar.png', // Путь к дефолтной аватарке
'check_field' => 'id', // Поле для проверки активности социальных сетей.
],
'genPass' => [
'method' => 'bcrypt', // Метод шифрования пароля
'filter' => 'number', // Фильтр генерации пароля
'length' => 8, // Количество знаков для генерации пароля
'min' => 6, // Минимальное количество знаков
'max' => 10, // Максимальное количество знаков
'stable_length' => true, // Стабильная генерация
'secret' => 'erb26vwu2', // Секретная фраза для метода md5
'viewReg' => true, // Верхний регистр для метода md5
'default_gen' => true, // Использовать default_pass как дефолтный пароль
'default_pass' => "123456", // Строка для дефолтного пароля
'custom_string' => "", // Свой набор символов и знаков
'custom_hard' => "", // Свой набор символов и знаков
'custom_unique' => "", // Свой набор символов и знаков
'generation_stages' => 10, // Сколько стадий генерации будет
],
'redirect' => [
'auth' => 'home', // редирект после авторизации укажите именной роут
'logout' => 'home', // редирект после выхода укажите именной роут
],
'routes' => [
'auth_login' => [
'/login/{provider}', // url на вызов провайдера
'social-auth' // route name
],
'auth_login_callback' => [
'/login/{provider}/callback', // url на вызов коллбэк
'social-callback' // route name
],
'social_logout' => [
'/logout/social', // url на вызов выход с аккаунта
'social-logout' // route name
],
'auth_login_form' => [
'/login', // url на вызов формы входа
'auth-login-form' // route name
],
'auth_login_form_callback'=> [
'/login/auth', // url на вызов коллбэк form
'auth-login-form-callback' // route name
],
],
'custom_fields' => [
/*
'phone' => '+1234567890',
'address' => '123 Main Street',
*/
],
'access_admin' => [
/*
1,
*/
],
'feedback_before' => [
/* [
'class' => 'App\Services\Testing',
'method' => 'one',
'params' => []
],
*/
],
'feedback_after' => [
/* [
'class' => 'App\Services\Testing',
'method' => 'one',
'params' => []
],
*/
],
'feedback_register' => [
/* [
'class' => 'App\Services\Testing',
'method' => 'one',
'params' => []
],
*/
],
'providers' => [
/* 'vkontakte', 'github',
*/
],
'logger' => [
'method' => true, // Использовать дефолтный вариант логирования(false - Кастомный логер)
'path' => "logs/custom.log", // Путь для кастомного логера
'log_login' => true, // Логировать успешую авторизацию
'log_register' => true, // Логировать успешую регистрацию
],
- Для модели
Userнеобходимо еще добавить наши новые поля которые будут дополнительно использоваться:
protected $fillable = [
'img',
'provider',
'provider_id',
'isUpdate',
];-
Выполните команду:
php artisan migrateчтобы добавить вспомогательные поля в таблицу пользователей. -
Для использования дополнительных провайдеров авторизации в Laravel Socialite, вы можете посетить сайт socialiteproviders.com. Здесь вы найдете список доступных провайдеров, а также инструкции по их установке и настройке.
-
Пример с подключённым провайдером ВК. Как только вы подключите провайдер добавьте маршрут в ваш blade шаблон.
@guest
<a href="{{route('social-auth', 'vkontakte')}}"> Вход через ВК</a>
@endguestВы можете использовать наш пакет не только для работы авторизации с провайдерами социальных сетей но и альтернативным способом через обычную форму они работают параллельно друг другу.
В конфигрурационном файле /config/socials.php параметр isLoginForm будет разрешать авторизовываться через обычную форму авторизации.
В разделе genPass параметр method так же отвечает за метод шифрования нашего пароля.
Мы не ограничеваемся в стандарном методе шифрования. Если используете другие методы шифрования, вы можете использовать как стандартный так и разные методы. Что позволяет использовать под разные проекты.
Доступные следующие методы шифрования пароля:
bcryptmd2md4md5password_hashsha1sha224sha256sha384sha512sha512/224sha512/256sha3-224sha3-256sha3-384sha3-512ripemd128ripemd160ripemd256ripemd320whirlpooltiger128,3tiger160,3tiger192,3tiger128,4tiger160,4tiger192,4snefrusnefru256gostgost-cryptoadler32crc32crc32bcrc32cfnv132fnv1a32fnv164fnv1a64joaatmurmur3amurmur3cmurmur3fxxh32xxh64xxh3xxh128pbkdf2base64
Если необходимо ограничить доступ к авторизации через социальные сети. Вы можете это легко сделать в конфигрурационном файле /config/socials.php за это отвечает параметр isActive. Но так же вы можете вашим Администраторам или Определенным лицам дать доступ всегда авторизоваться даже если активно огранеичение. Для этого в разделе access_admin укажите через запятую id пользователей из модели User.
Для них всегда будет доступ.
'access_admin' => [
/*
1,
2,
*/
],Мы добавили возможность использовать Blade директивы для удобства вы можете использовать список сссылок для авторизации через провайдеры.
Просто добавьте директиву @socials где нибудь в html.
<body>
@socials
</body>Так же можно передавать свои классы и стили для ссылок @socials(class="btn btn-primary", style="font-size: 16px; color: #ff2d20")
<body>
@socials(class="btn btn-primary", style="font-size: 16px; color: #ff2d20")
</body>Если у вас в модели User используются много полей которые так же необходимо добавлять, вы можете так же добавить их в конфигрурационном файле /config/socials.php в разделе custom_fields. Они будут добавлены вместе с входными данными от провайдеров при создание нового пользователя.
'custom_fields' => [
/*
'phone' => '+1234567890',
'address' => '123 Main Street',
*/
],Вы можете полность настроить абсалютно все названия полей которые используются. В разделе user так же можно настроить стоковые поля если у вас отличаются.
Вы можете использовать разные фильтры для генерации пароля чтобы создавать разные комбинации в конфигрурационном файле /config/socials.php в разделе genPass параметр filter.
Доступные фильтры для генерации:
stringТолько английские буквы верхнего и нижнего регистра.numberТолько цифры.hardТолько английские буквы верхнего и нижнего регистра а так же цифры.hard-uniqueТолько английские буквы верхнего и нижнего регистра а так же цифры и спец символы.rus-stringТолько русские буквы верхнего и нижнего регистра.rus-hardТолько русские буквы верхнего и нижнего регистра а так же цифры.rus-uniqueТолько русские буквы верхнего и нижнего регистра а так же цифры и спец символы.custom-stringЗадайте свой уникальный вариант букв, знаков, символов. Параметрcustom_stringcustom-hardЗадайте свой уникальный вариант букв, знаков, символов. Параметрcustom_hardcustom-uniqueЗадайте свой уникальный вариант букв, знаков, символов. Параметрcustom_unique
Для тестирования можно задать свой собственный дефолтный пароль. Настроить можно в разделе genPass за это отвечает параметры:
default_gen если true то будет использоваться строка default_pass в качестве вашего пароля, если false то будет рандомиться каждый раз новый пароль.
Для более защищённого пароля так же важно и его длина. Вы можете так же контрлировать его длину в конфигрурационном файле /config/socials.php в разделе genPass.
Варианты длины:
stable_lengthtrue Стабильная генерация на основе значенияlength, false Рандомная генерация на основе рандомаminиmax.
Для более эффективной защиты и уникальности пароля вы можете запустить процесс генерации пароля. Перед шифрованием и созданием пользователя будет создаваться массив с большим количесвом паролей, результатом будет рандомно выбран один из массива.
Чтобы изменить перейдите конфигрурационном файле /config/socials.php в разделе genPass.
generation_stages отвечает за количество стадий генерации строк.
Вы можете задавать свои переводы для переводных фраз. Чтобы редактировать их опубликуйте ресурсы пакета.
Вы можете запускать свои кастомные функции до и после авторизации пользователя. Например если хотите использовать дополнительно spatie permission можно запустить фунцию которая выдасть роль пользователю после регистрации. Чтобы назначить функции в конфигрурационном файле /config/socials.php в разделе feedback_before (до начала) и feedback_after (после), feedback_register (после регистрации)
Далее будет выполнена авторизации и редирект.
'feedback_before' => [
/* [
'class' => 'App\Services\Testing',
'method' => 'one',
'params' => []
],
*/
],
'feedback_after' => [
/* [
'class' => 'App\Services\Testing',
'method' => 'one',
'params' => []
],
*/
],
'feedback_register' => [
/* [
'class' => 'App\Services\Testing',
'method' => 'one',
'params' => []
],
*/
],Чтобы избежать любые конфликты с маршрутами и их именами можно задавать свои собственные. Для управления перейдите в конфигрурационном файле /config/socials.php в раздел routes. На данный момент можно управлять тремя роутами: Вызов провайдера, Вызов коллбэка провайдера, выход с аккаунта. Задайте для каждого роута свой url и имя роута.
'routes' => [
'auth_login' => [
'/login/{provider}', // url на вызов провайдера
'social-auth' // route name
],
'auth_login_callback' => [
'/login/{provider}/callback', // url на вызов коллбэк
'social-callback' // route name
],
'social_logout' => [
'/logout/social', // url на вызов выход с аккаунта
'social-logout' // route name
]
],Если вы не хотите использовать стандартный файл для логирования, вы можете использовать отдельный файл и записывать данные логов туда.
Для управления перейдите в конфигрурационном файле /config/socials.php в раздел logger.
'logger' => [
'method' => true, // Использовать дефолтный вариант логирования(false - Кастомный логер)
'path' => "logs/custom.log", // Путь для кастомного логера
'log_login' => true, // Логировать успешую авторизацию
'log_register' => true, // Логировать успешую регистрацию
],Наш пакет предоставляет ряд дополнительных возможностей, которые могут быть полезны при работе с уведомлениями:
php artisan socials:install- Данная команда установит все необходимые файлы.php artisan socials:access {--u= : User search field (ID)} {--a= : Access flag (0,1)}- Данная команда может банить/разбанить пользователя.
Для проверки работоспособности можно выполнить специальную команду:
- ./vendor/bin/phpunit --configuration phpunit.xml
Social - это программное обеспечение с открытым исходным кодом, лицензированное по MIT license.