Пакет позволяет реализовать аутентификацию при помощи ботов в соц. сетях. Основная задача упростить аутентификацию для пользователей, которые используют мобильные устройства для входа на сайт через соц. сеть.
Ссылки вида:
- https://vk.me/...
- https://t.me/...
- https://m.me/...
откроют мобильное приложение для начала диалога с ботом. Посетителю не придется повторно вводить логин и пароль в браузере.
Возможно подключить ботов:
- Вконтакте
- Telegram
- Ваш собственный провайдер (пример ниже)
Demo https://laravel.zetrider.ru/
-
composer require zetrider/botauth
-
Подключить пакет в config/app.php
- Провайдер
ZetRider\BotAuth\BotAuthServiceProvider::class,
- Фасад (Алиас)
'BotAuth' => ZetRider\BotAuth\Facades\BotAuth::class,
- Провайдер
-
Скопировать конфиг. файл
php artisan vendor:publish --tag=botauth-config
при необходимости
php artisan vendor:publish --tag=botauth-views
php artisan vendor:publish --tag=botauth-migrations
-
Указать для нужных соц. сетей ссылку в параметре link.
- https://vk.me/...
- https://t.me/...
- https://m.me/...
-
Заполнить ENV файл ключами ботов
BOTAUTH_VKONTAKTE_API_SECRET
BOTAUTH_VKONTAKTE_API_TOKEN
BOTAUTH_VKONTAKTE_API_CONFIRM
BOTAUTH_TELEGRAM_API_TOKEN
BOTAUTH_TELEGRAM_PROXY
BOTAUTH_FACEBOOK_API_SECRET
BOTAUTH_FACEBOOK_API_TOKEN
BOTAUTH_FACEBOOK_API_CONFIRM
-
Запустить миграции
php artisan migrate
-
В Middleware VerifyCsrfToken добавить исключение адреса для callback, по умолчанию botauth/callback/*'
protected $except = [
'botauth/callback/*' // Except callback Csrf middleware
];
- Для вашей модели User добавьте трейт:
use ZetRider\BotAuth\Traits\BotAuthUserTrait;
который добавит отношение с логинами пользователя из соц. сетей
- Откройте настройки своего сообщества или создайте новое https://vk.com/groups?w=groups_create
- В настройках сообщества откройте райздел "Настройки" - "Работа с API"
- Создайте ключ доступа, выберите пункт "Разрешить приложению доступ к сообщениям сообщества", запишите ключ, его нужно указать в .env
BOTAUTH_VKONTAKTE_API_TOKEN
- На той же странице выберите Callback API, выберите "Версия API" 5.95, укажите в поле "Адрес" callback адрес вашего сайта, пример по умолчанию https://DOMAIN/botauth/callback/vkontakte
- Ниже укажите строку, которую должен вернуть сервер в .env
BOTAUTH_VKONTAKTE_API_CONFIRM
- В поле "Секретный ключ" придумайте любой секретный ключ, укажите в .env
BOTAUTH_VKONTAKTE_API_SECRET
- После заполнения всех ключей в .env нажмите кнопку "Подтверидть"
- На этой же странице откройте вкладку "Типы событий", нужно выбрать "Входящие сообщения"
- Откройте настройки сообщества, пункт "Сообщения", включите "сообщения сообщества"
- Откройте настройки сообщества, пункт "Сообщения" - "Настройки для бота", включите "Возможности ботов"
Бот готов к работе.
Пример прямой ссылки на диалог с ботом https://vk.me/zetcode
- Создайте своего бота через @BotFather
- Запомните ключ, укажите в .env
BOTAUTH_TELEGRAM_API_TOKEN
- Добавьте веб хук через
https://api.telegram.org/botYOUR_TOKEN/setWebhook?url=https://DOMAIN/botauth/callback/telegram
где YOUR_TOKEN ваш токен. - При необходимости укажите прокси в .env
BOTAUTH_TELEGRAM_PROXY
, например socks5h://127.0.0.1:1080
Бот готов к работе.
Пример прямой ссылки на диалог с ботом https://t.me/BotAuthBot
- У вас должна быть создана страница, если ее нет, добавьте https://www.facebook.com/pages/creation/?ref_type=universal_creation_hub
- Добвьте новое приложение https://developers.facebook.com/apps/
- В настройках приложение выберите "Основное", скопируйте "Секрет приложения" в .env
BOTAUTH_FACEBOOK_API_SECRET
- В настройках приложение нужно добавить продукт "Messenger"
- В настройках продукта "Messenger" создайте токен доступа, укажите его в .env BOTAUTH_FACEBOOK_API_TOKEN
- В настройках продукта "Messenger" создайте веб хук, в URL обратного вызова укажите https://DOMAIN/botauth/callback/facebook в поле "Подтвердите маркер" укажите произвольный текст, сохраните в .env BOTAUTH_FACEBOOK_API_CONFIRM в опциях "Поля подписки" выберите "messages" нажмите "Подтвердить"
- После подтверждения сервера в настройках веб хуков выберите страницу, нажмите "Подписаться" выбран нужную страницу
- В окне "Проверка приложения Messenger" рядом с пунктом "pages_messaging" нажмите "Добавить к заявке"
- Бот уже готов к работе, но доступен только для администраторов. После подтверждения приложения, он станет доступен для всех посетителей. Отправьте приложение на модерацию.
Пример прямой ссылки на диалог с ботом https://m.me/zetridercode
- Сайт должен работать по https
- Facebook бот возвращает PSID, который не соответствует публичному ID пользователя.
- По умолчанию контроллер бота работает с моделью \App\User. Если у вас другой случай, просто создайте свой контроллер и модель на основе примеров из репозитория.
Создайте свой класс, который наследует абстрактный класс ZetRider\BotAuth\AbstractProvider
Пример example/ExampleProvider.php
Добавьте в сервис провайдер, например AppServiceProvider в методе boot
// Register example proider
BotAuth::extend('example', function() {
return new \Path\To\Your\Class\ExampleProvider();
});
Провайдер будет обрабатывать запросы в callback по адресу /botauth/callback/example
Событие при успешной обработке нового сообщения от бота
// Catch bot callback
\Event::listen(\ZetRider\BotAuth\Events\MessageNewEvent::class, function($event)
{
$provider = $event->provider; // ZetRider\BotAuth\AbstractProvider
$slug = $provider->getProviderSlug();
$data = $provider->getCallbackResponse();
$user = $provider->getUser();
$text = $provider->getText();
// You can send a message
// $provider->sendMessage(__('Back to web site'));
});