Регистрация через соц.сети плагин Buddies October CMS

Опубликовано:
02.07.2020 в 22:31
Категория:
Предисловие: В данной статье я расскажу как простым способом наладить авторизацию через соц.сети на October CMS. В примере используется плагин lovata.buddies и пакет laravel socialite.

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');
}

Теперь вход через ВК на Октябре заработает нормально. Всем спасибо, надеюсь кому поможет!