1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ezy-oauth

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

OAuth

Простой в использовании инструмент авторизации OAuth2.

  • Получение URL страницы авторизации.
  • Через код доступа (code) получение токена доступа (access_token).
  • Через токен доступа (access_token) получение информации о пользователе.
  • Поддержка неявного предоставления доступа.
  • Поддержка мобильного приложения и H5-логина.
  • Соответствие стандарту PSR, легко интегрируется.
  • В настоящее время поддерживаются платформы: WeChat, Alipay, Douyin.

Установка зависимостей

composer require reezy/oauth

Использование

Авторизация мобильного приложения

$userId = $container->get(OAuthManagerInterface::class)->login("wechat", $code);

H5-логин

try {
    // Автоматическое распознавание хоста Webview и использование соответствующего драйвера авторизации
    $userId = $container->get(OAuthManagerInterface::class)->oauth($request);
} catch (OAuthRedirectException $exception) {
    // Перенаправление на страницу авторизации
    return $exception->getResponse();
}  

Получение экземпляра OAuthInterface

$oauth = $container->get(OAuthFactoryInterface::class)->get('wechat-mp');

Перед использованием убедитесь, что следующие интерфейсы зарегистрированы в контейнере:

  • Psr\Http\Message\ResponseFactoryInterface — Hyperf не реализует, пользователь должен реализовать и зарегистрировать в контейнере.
  • Psr\SimpleCache\CacheInterface — поставляется с Hyperf.
  • Reezy\OAuth\Contract\OAuthFactoryInterface — предоставляется реализация по умолчанию, автоматически регистрируется в контейнере в Hyperf.
  • Reezy\OAuth\Contract\OAuthManagerInterface — предоставляется реализация по умолчанию, автоматически регистрируется в контейнере в Hyperf.
  • Reezy\OAuth\Contract\OAuthUserIdProviderInterface — пользователь должен реализовать и зарегистрировать в контейнере.
use Hyperf\HttpMessage\Server\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ResponseFactoryInterface;

class DefaultResponseFactory implements ResponseFactoryInterface
{
    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface
    {
        return (new Response())->withStatus($code, $reasonPhrase);
    }
}

Интерфейсы

interface OAuthManagerInterface
{
    /**
     * Авторизация мобильного приложения с использованием кода доступа и возврат ID пользователя
     *
     * @param $name
     * @param $code
     * @return int
     */
    function login($name, $code): int;


    /**
     * H5-логин, возвращает ID пользователя, можно использовать исключение OAuthRedirectException для перенаправления на ответ объекта страницы авторизации
     *
     * @param ServerRequestInterface $request
     * @param string|null $name
     * @return int
     * @throws OAuthRedirectException
     */
    public function oauth(ServerRequestInterface $request, string $name = null): int;
}

interface OAuthInterface
{
    /**
     * Получение URL страницы авторизации
     *
     * @param string|null $redirectUri
     * @param string|null $state
     * @param bool $isSilent
     * @return string
     */
    function getAuthUrl(string $redirectUri = null, string $state = null, bool $isSilent = false): string;

    /**
    * Получение токена доступа (access_token) через код доступа (code)
    *
    * @param string $code
    * @return OAuthInfo
    */
    function getAccessToken(string $code): OAuthInfo;

    /**
    * Получение информации о пользователе через токен доступа (access_token)
    *
    * @param OAuthInfo $token
    * @return OAuthInfo
    */
    function getUserInfo(OAuthInfo $token): OAuthInfo;

    /**
    * Проверка поддержки неявного предоставления доступа
    *
    * @return bool
    */
    function isSupportSilentMode(): bool;

    function getName(): string;
    function getClientId(): string;
    function getCodeKey(): string;
}


interface OAuthUserIdProviderInterface
{
    /**
    * После успешной авторизации получение ID пользователя, если пользователь не существует, возвращается 0
    *
    * @param string $name
    * @param string $clientId
    * @param OAuthInfo $info
    * @return int
    */
    function find(string $name, string $clientId, OAuthInfo $info): int;

    /**
    * Если пользователь не существует, получение информации о пользователе, регистрация нового пользователя и возвращение его ID
    *
    * @param string $name
    * @param string $clientId
    * @param OAuthInfo $info
    * @return int
    */
    function register(string $name, string $clientId, OAuthInfo $info): int;
}

Конфигурация

<?php 
return [  
    // Идентификатор приложения WeChat на платформе Open Platform
    'wechat' => [
        'client_id'  => env('WECHAT_OPEN_PLATFORM_APP_ID'),
        'client_secret'  => env('WECHAT_OPEN_PLATFORM_APP_SECRET'),
    ],
    // Идентификатор официального аккаунта WeChat
    'wechat-mp' => [
        'driver' => Reezy\OAuth\Driver\OAuthWechat::class,
        'client_id'  => env('WECHAT_OFFICIAL_ACCOUNT_APP_ID'),
        'client_secret'  => env('WECHET_OFFICIAL_ACCOUNT_APP_SECRET'),

        // Область действия, поддерживаемая официальным аккаунтом WeChat для неявного предоставления доступа
        'scope' => 'snsapi_base'
    ],
    // Идентификаторы приложения Alipay
    'alipay' => [
        'client_id'  => env('ALIPAY_APP_ID'),
        'client_secret'  => env('ALIPAY_APP_SECRET')

        'app_cert_path'  =>
``` ```
env('ALIPAY_APP_CERT_PATH'),
        'root_cert_path'  => env('ALIPAY_ROOT_CERT_PATH'),
        'alipay_cert_path'  => env('ALIPAY_ALIPAY_CERT_PATH')
    ],
    // OAuthMiddleware 识别 webview
    'ua-mappings' => [
        'wechat-mp' => ' MicroMessenger/',
        'alipay' => ' AlipayClient/',
        'qq' => ' QQ/',
        'douyin' => 'Aweme/'
    ]
];

LICENSE

The Component is open-sourced software licensed under the Apache license.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Простой в использовании компонент для авторизации OAuth2. Расширить Свернуть
Apache-2.0
Отмена

Обновления (2)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/ezy-oauth.git
git@gitlife.ru:oschina-mirror/ezy-oauth.git
oschina-mirror
ezy-oauth
ezy-oauth
master