Cайт на момент запроса представлял собой интернет-магазин на базе shopaholic, а в качестве frontend авторизации выступал плагин buddies.
Как оказалось buddies из коробки умеет регистрировать юзера через социальные сети. Для этой процедуры он использует пакет Laravel socialite
Но, что бы заставить работать этот механизм требуется наличие этого самого пакета и его расширений. Далее я опишу список действий по шагам.
Шаг 1. Проверить наличие пакетов socialite
Обязательно сделайте бекап!!! Идем в composer.json и проверяем/добавляем следующее
"require": {
"laravel/socialite": "^3.1",
"socialiteproviders/manager": "^3.0"
"socialiteproviders/vkontakte": "^4.0",
"socialiteproviders/twitter": "^3.0",
"socialiteproviders/facebook": "dev-master"
},
Должен быть включен в список основной пакет socialite, manager и требуемые для вас расширения, я для себя взял vkontakte, twitter, facebook. Список соц. сетей и доп. возможности смотрите в документации тут https://socialiteproviders.netlify.com/
Далее мы запускаем терминал и вводим команду composer install. У вас должен запуститься процесс проверки зависимостей и загрузка отсутствующих пакетов.
Шаг 2. Добавить провайдера в config/app.php
Идем в файл /config/app.php и добавляем следующее.
'providers' => array_merge(include(base_path('modules/system/providers.php')), [
'System\ServiceProvider',
\SocialiteProviders\Manager\ServiceProvider::class,
]),
'aliases' => array_merge(include(base_path('modules/system/aliases.php')), [
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
])
Провайдеры добавлены, если на этом этапе у вас возникла ошибка типа Opps! Sorry значит скорее всего в композере произошла ошибка и пакеты не корректно встали. На этот случай вы сделали бекап! Я надеюсь)
Шаг 3. Регистрация приложений в соц. сетях.
Это целая отдельная тема, поэтому смотрите на сторонних ресурсах
- Facebook - Как создать приложение Facebook
- VK - Как создать приложение VK
- Google - Как создать приложение Google
Шаг 4. Настраиваем config/services.php
Добавьте в массив который возвращает файл /config/services.php следующие элементы:
'facebook' => [
'client_id' => '2471370716206532',
'client_secret' => '707bdf5b00f788c3137db428e3614343',
'redirect' => '/facebook'
],
'google' => [
'client_id' => '179103380118-v58hrt7urq6c8oa0aj9gcjoejlqfrmdg.apps.googleusercontent.com',
'client_secret' => 'RP6zq9nXfNWb8CmXyTnlLmKw',
'redirect' => '/google'
],
'vkontakte' => [
'client_id' => 'MJDMXz0TLZo8C3R9ki7L',
'client_secret' => '5af104c35af104c35af104c38d5a9a29cc55af15af104c307f6691f5e8e51e108cdddc8',
'redirect' => '/vkontakte'
]
Для каждой соц. сети вы указываете следующие параметры:
- client_id - id приложения зарегистрированного для соц.сети
- client_secret - api ключ приложения
- redirect - страница куда соц.сеть отдаст данные (об этом в 5 шаге)
Естественно эти данные надо взять из приложений соцсетей.
Шаг 5. Создаем странички для отлова данных
Теперь когда мы завершили все подготовительные процессы нам нужно создать страницы для отлова данных пришедших из социальных сетей.
Создаем страницы для наших соц.сетей и выбрасываем на них компонент SocialiteLogin с указанием Sociliate code. Не забываем создать страницу ошибки и указать ее в настройках компонента. В приложениях социальных сетей указываем url с нашими обработчиками. Например в моем случае https://site.ru/facebook
Теперь все должно работать, если будут проблемы с Вконтакте. В моем случае была ошибка driver [vkontakte] not supported, решил я ее одним ударом костыля.
В Plugin.php своего плагина в метод boot нужно добавить строку
Event::listen( \SocialiteProviders\Manager\SocialiteWasCalled::class, 'SocialiteProviders\VKontakte\VKontakteExtendSocialite@handle');
Получится подобное:
public function boot()
{
Event::listen(\SocialiteProviders\Manager\SocialiteWasCalled::class, 'SocialiteProviders\\VKontakte\\VKontakteExtendSocialite@handle');
}
Теперь вход через ВК на Октябре заработает нормально. Всем спасибо, надеюсь кому поможет!