定制 denx-b/bitrix-social-auth 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

denx-b/bitrix-social-auth

Composer 安装命令:

composer require denx-b/bitrix-social-auth

包简介

Bitrix auth social network adapter

README 文档

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::getAuthUrl(), вместо него надо использовать
echo Telegram::getButton(string $selector, string $size = 'large', string $redirect = '/'),
который в качестве первого арумента принимает селектор в DOM куда на js будет вставлен виджет (кнопка) авторизации.
Метод Telegram::getButton() возвращает строку подключения виджета и стоить иметь ввиду, что кнопка появится не в месте вызова метода, а в DOM, в указанном в первом аргументе селекторе.

Requirements

Bitrix Social Auth requires the following:

Installation

Bitrix Social Auth is installed via Composer. To add a dependency to bitrix-social-auth in your project, either

Run the following to use the latest stable version

    composer require denx-b/bitrix-social-auth

You can of course also manually edit your composer.json file

{
    "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;

Это собственно и всё, что потребуется для создания новых адаптеров.
Для наглядности можно посмотреть пример уже созданного адаптера.
Буду всеми рукам за, если вы предложите новые адаптеры для других соц. сетей.

denx-b/bitrix-social-auth 适用场景与选型建议

denx-b/bitrix-social-auth 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 895 次下载、GitHub Stars 达 12, 最近一次更新时间为 2019 年 01 月 13 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 denx-b/bitrix-social-auth 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 denx-b/bitrix-social-auth 我们能提供哪些服务?
定制开发 / 二次开发

基于 denx-b/bitrix-social-auth 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 895
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 12
  • 点击次数: 17
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 12
  • Watchers: 1
  • Forks: 6
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-01-13