denx-b/bitrix-social-auth

Bitrix认证社交网络适配器

1.6.3 2022-06-15 16:02 UTC

This package is auto-updated.

Last update: 2024-09-15 21:08:34 UTC


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需要以下条件

安装

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;

这就是创建新适配器所需的所有内容。
为了更直观,可以查看已创建适配器的示例
如果您能提供其他社交网络的适配器,我将不胜感激。