denx-b / bitrix-social-auth
Bitrix认证社交网络适配器
1.6.3
2022-06-15 16:02 UTC
Requires
- php: >=7.0.0
- ext-curl: *
- ext-fileinfo: *
- ext-json: *
README
init.php
use Dbogdanoff\Bitrix\Auth\Auth; use Dbogdanoff\Bitrix\Auth\Adapter; try { Auth::addAdapter(new Adapter\Vk([ 'client_id' => '123456', 'client_secret' => 'xxxxxxxxxx' ])); Auth::addAdapter(new Adapter\Fb([ 'client_id' => '123456', 'client_secret' => 'xxxxxxxxxx' ])); Auth::addAdapter(new Adapter\Google([ 'client_id' => '123456', 'client_secret' => 'xxxxxxxxxx' ])); Auth::addAdapter(new Adapter\Github([ 'client_id' => '123456', 'client_secret' => 'xxxxxxxxxx' ])); Auth::addAdapter(new Adapter\Telegram([ 'client_id' => 'yourbotname_bot', 'client_secret' => 'API Token' ])); Auth::addAdapter(new Adapter\Ok([ 'client_id' => '123456', 'client_secret' => 'xxxxxxxxxx', 'client_pub_key' => 'yyyyyyyyyy' ])); } catch (\Exception $e) { /* * Все мы прекрасно понимаем, что вывод в init.php – плохо, * но это пример и вы можете вынести весь этот код куда вам удобно, например в компонент * Но я прамо так и использую :) * Класс .adapter-error у меня position: fixed прилипает к верху экрана */ echo '<div class="adapter-error">' . $e->getMessage() . '</div>'; }
公共部分选项
<ul class="auth__list"> <?php /** @var \Dbogdanoff\Bitrix\Auth\Adapter\Adapter[] $adapters */ $adapters = \Dbogdanoff\Bitrix\Auth\Auth::getAdapters(); ?> <li class="auth__item"> <a class="auth__link" href="<?=$adapters['Facebook']->getAuthUrl()?>"> <svg class="auth__icon" width="20" height="20"> <use xlink:href="#facebook"></use> </svg> </a> </li> <li class="auth__item"> <a class="auth__link" href="<?=$adapters['VKontakte']->getAuthUrl()?>"> <svg class="auth__icon" width="22" height="22"> <use xlink:href="#vk"></use> </svg> </a> </li> ... </ul>
Telegram特性
通过Telegram进行授权是通过小部件实现的,因此其使用方式与其他方式不同,并存在一些限制,例如,不能按我们的意愿进行样式化。
此外,Telegram::getAuthUrl() 方法将无法完全工作,应使用以下方法代替:
echo Telegram::getButton(string $selector, string $size = 'large', string $redirect = '/')
,
该方法的第一个参数是DOM中的选择器,其中将插入授权按钮的小部件(按钮)。
Telegram::getButton() 方法返回连接字符串,请注意,按钮不会出现在调用方法的地方,而是在第一个参数指定的DOM选择器中。
需求
Bitrix Social Auth需要以下条件
- PHP 7.0.0+
- 1C-Bitrix 14.0.0+
安装
Bitrix Social Auth通过Composer安装。要将bitrix-social-auth作为依赖项添加到您的项目中,可以
运行以下命令以使用最新稳定版本
composer require denx-b/bitrix-social-auth
当然,您也可以手动编辑您的composer.json文件
{ "require": { "denx-b/bitrix-social-auth": "1.5.*" } }
自定义适配器
要创建新的适配器,需要创建一个类,并从抽象类\Dbogdanoff\Bitrix\Auth\Adapter\Adapter继承
该类有5个抽象方法需要实现和3个辅助常量
/** * Название соц. сети. * Чаще всего используется для вывода в публичной части * * @var string */ const NAME = ''; /** * ID соц. сети в системе Bitrix. * Используется в поле EXTERNAL_AUTH_ID таблицы b_socialservices_user * * @var string */ const ID = ''; /** * Префикс для генерации логина. * * @var string */ const LOGIN_PREFIX = ''; /** * Возвращает адрес куда надо отправить пользователя для разрешения запрошенных прав. * * @param array $state * @return mixed */ abstract public function getAuthUrl(array $state = []): string; /** * Получение токена. * * @return array * @throws \Exception */ abstract protected function getToken(): array; /** * Время жизни токена * * @return int */ abstract protected function getTokenExpires(): int; /** * Запрос на получение информации о пользователе. * * @param $token * @return array */ abstract protected function getUserInfo($token): array; /** * Принимает массив с метода getUserInfo * Должен вернуть массив с ключами для таблицы b_user * * @param array $userInfo * @return array */ abstract protected function getUserFields(array $userInfo): array;
这就是创建新适配器所需的所有内容。
为了更直观,可以查看已创建适配器的示例。
如果您能提供其他社交网络的适配器,我将不胜感激。