Частый вопрос на форумах, ранее он был мне не интересен, пока я сам не столкнулся с проблемами, когда пытался прикрутить к интернет магазину Shopaholic вход через социальные сети.

Cайт на момент запроса представлял собой интернет-магазин на базе shopaholic, а в качестве frontend авторизации выступал плагин buddies.

Как оказалось buddies из коробки умеет регистрировать юзера через социальные сети. Для этой процедуры он использует пакет Laravel socialite

Но, что бы заставить работать этот механизм требуется наличие этого самого пакета и его расширений. Далее я опишу список действий по шагам.

Шаг 1. Проверить наличие пакетов socialite

Обязательно сделайте бекап!!! Идем в composer.json и проверяем/добавляем следующее

"require": {
     "laravel/socialite": "^3.1",
     "socialiteproviders/vkontakte": "^4.0",
     "socialiteproviders/twitter": "^3.0",
     "socialiteproviders/facebook": "dev-master"
},

Должен быть включен в список основной пакет socialite и требуемые для вас расширения, я для себя взял vkontakte, twitter, facebook. Список соц. сетей и доп. возможности смотрите в документации тут https://socialiteproviders.netlify.com/

Далее мы запускаем SSH сессию (консоль) и вводим команду composer update. У вас должен запустится процесс проверки зависимостей и загрузка отсутствующих пакетов.

Шаг 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, решил я ее одним ударом костыля.

В plugins/lovata/buddies/Plugin.php в метод boot нужно добавить строку

Event::listen( \SocialiteProviders\Manager\SocialiteWasCalled::class, 'SocialiteProviders\VKontakte\VKontakteExtendSocialite@handle');  

Получится подобное:

public function boot()
{
    Event::subscribe(ExtendFieldHandler::class);
    Event::subscribe(UserModelHandler::class);
    Event::listen(\SocialiteProviders\Manager\SocialiteWasCalled::class, 'SocialiteProviders\\VKontakte\\VKontakteExtendSocialite@handle');
}

Теперь вход через ВК на Октябре заработает, но до первого обновления lovata.buddies. Скоро я найду нормальное решение этой проблемы и дополню статью.