OAuth
Простой в использовании инструмент авторизации OAuth2.
Установка зависимостей
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/'
]
];
The Component is open-sourced software licensed under the Apache license.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )