frontegg / php-sdk
Frontegg SDK for PHP
0.2.3
2021-05-21 10:41 UTC
Requires
- php: ^7.3 || ^8.0
- ext-curl: *
- ext-json: *
- guzzlehttp/psr7: ^1.6
- psr/http-message: ^1.0
- relay/relay: ^1.0
Requires (Dev)
- phpstan/phpstan: ^0.12.37
- phpunit/phpunit: ~9.0
- squizlabs/php_codesniffer: 3.*
This package is auto-updated.
Last update: 2024-09-21 18:34:47 UTC
README
Frontegg是一个网站平台,SaaS公司可以在其中建立完全托管、可扩展且具有品牌意识的-SaaS功能,并通过最多5行代码将它们集成到其SaaS门户中。
安装
使用包管理器Composer安装Frontegg SDK for PHP。
composer require frontegg/php-sdk
使用方法
Frontegg提供多个组件,用于与Frontegg的可扩展后端和前端库集成。
简单示例
最小配置
<?php require_once './vendor/autoload.php'; require_once './src/Frontegg/autoload.php'; use Frontegg\Frontegg; use Psr\Http\Message\RequestInterface; $config = [ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_SECRET_API_KEY', 'contextResolver' => function(RequestInterface $request) { return [ 'tenantId' => 'THE-TENANT-ID', 'userId' => 'test-user-id', 'permissions' => [], ]; }, ]; $frontegg = new Frontegg($config); $frontegg->init();
高级配置
<?php require_once './vendor/autoload.php'; require_once './src/Frontegg/autoload.php'; use Frontegg\Frontegg; use Frontegg\HttpClient\FronteggCurlHttpClient; use Psr\Http\Message\RequestInterface; $config = [ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_SECRET_API_KEY', 'apiBaseUrl' => 'https://api.frontegg.com/', 'authenticationBaseUrl' => 'https://api.frontegg.com/', 'apiUrls' => [ 'authentication' => '/auth/vendor', 'audits' => '/audits', ], 'contextResolver' => function(RequestInterface $request) { return [ 'tenantId' => 'THE-TENANT-ID', 'userId' => 'test-user-id', 'permissions' => [], ]; }, 'disableCors' => false, // You can enable/disable CORS headers for Middleware Proxy. 'httpClientHandler' => new FronteggCurlHttpClient(), // You can provide custom HTTP client. ]; $frontegg = new Frontegg($config); $frontegg->init();
配置
*特殊接口 - Frontegg\HttpClient\FronteggHttpClientInterface
,
**Curl客户端 - Frontegg\HttpClient\FronteggCurlHttpClient
审计
让您的客户记录他们对租户所做的事件、活动和更改。
Frontegg的托管审计日志功能允许SaaS公司仅用几行代码嵌入端到端的工作功能。
发送审计
<?php require_once './vendor/autoload.php'; require_once './src/Frontegg/autoload.php'; use Frontegg\Frontegg; use Frontegg\HttpClient\FronteggCurlHttpClient; use Psr\Http\Message\RequestInterface; $config = [ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_SECRET_API_KEY', 'apiBaseUrl' => 'https://api.frontegg.com/', 'apiUrls' => [ 'authentication' => '/auth/vendor', 'audits' => '/audits', ], 'contextResolver' => function(RequestInterface $request) { return [ 'tenantId' => 'THE-TENANT-ID', 'userId' => 'test-user-id', 'permissions' => [], ]; }, 'disableCors' => false, // You can enable/disable CORS headers for Middleware Proxy. 'httpClientHandler' => new FronteggCurlHttpClient(), // You can provide custom HTTP client. 'apiVersion' => 'v1', // Not used yet. Coming soon. ]; $frontegg = new Frontegg($config); $auditLog = $frontegg->sendAudit('THE-TENANT-ID', [ 'user' => 'testuser@t.com', 'resource' => 'Portal', 'action' => 'Login', 'severity' => 'Info', 'ip' => '123.1.2.3', ]);
获取审计
<?php require_once './vendor/autoload.php'; require_once './src/Frontegg/autoload.php'; use Frontegg\Frontegg; use Frontegg\HttpClient\FronteggCurlHttpClient; use Psr\Http\Message\RequestInterface; $config = [ 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_SECRET_API_KEY', 'contextResolver' => function(RequestInterface $request) { return [ 'tenantId' => 'THE-TENANT-ID', 'userId' => 'test-user-id', 'permissions' => [], ]; }, 'apiBaseUrl' => 'https://api.frontegg.com/', 'apiUrls' => [ 'authentication' => '/auth/vendor', 'audits' => '/audits', ], 'httpClientHandler' => new FronteggCurlHttpClient(), // You can provide custom HTTP client. ]; $frontegg = new Frontegg($config); $auditsLog = $frontegg->getAudits( 'THE-TENANT-ID', 'Text to filter', 0, // Offset 10, // Count 'action', // Field to sort by 'ASC' // Sort direction ('ASC' or 'DESC') // ... Additional filters );
事件
事件触发简单且可最大程度地配置为不同的通知渠道。
require_once './vendor/autoload.php'; require_once './src/Frontegg/autoload.php'; use Frontegg\Events\Config\ChannelsConfig; use Frontegg\Events\Config\DefaultProperties; use Frontegg\Events\Config\TriggerOptions; use Frontegg\Events\Channel\WebHookBody; use Frontegg\Frontegg; use Psr\Http\Message\RequestInterface; $clientId = 'YOUR_CLIENT_ID'; $apikey = 'YOUR_API_KEY'; $config = [ 'clientId' => $clientId, 'clientSecret' => $apikey, 'contextResolver' => function(RequestInterface $request) { return [ 'tenantId' => 'THE-TENANT-ID', 'userId' => 'test-user-id', 'permissions' => [], ]; }, ]; $frontegg = new Frontegg($config); $triggerOptions = new TriggerOptions( 'eventKeyForTest', new DefaultProperties( 'Default title', 'Default description', [ 'name' => 'Policy 4', 'id' => '11223456783245234', ] ), new ChannelsConfig( new WebHookBody([ 'title' => 'Test title!', ]) ), 'YOUR_TENANT_ID' ); $response = $frontegg->triggerEvent($triggerOptions);
中间件(代理)
Frontegg代理将请求转发到Frontegg API并返回响应。
原始PHP中没有中间件(HTTP请求的过滤器机制),但在某些框架中有所支持。例如,在Laravel中。
这里您可以看到原始PHP的示例。您可以通过中间件轻松地将其应用于您的框架(对于Laravel,请参阅https://github.com/frontegg/samples/tree/master/frontegg-laravel-starter)。
<?php require_once './vendor/autoload.php'; require_once './src/Frontegg/autoload.php'; use Frontegg\Frontegg; use GuzzleHttp\Psr7\Request; use Psr\Http\Message\RequestInterface; /** * Setup routing rule for "/frontegg" URIs. * Can be a part of middleware f.e. in Laravel. */ if (isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/frontegg') === 0) { $request = new Request('POST', $_SERVER['REQUEST_URI']); $response = handleFronteggUri($request); } // ... function handleFronteggUri(RequestInterface $request) { $clientId = 'YOUR_CLIENT_ID'; $apikey = 'YOUR_API_KEY'; $config = [ 'clientId' => $clientId, 'clientSecret' => $apikey, 'apiBaseUrl' => 'https://dev-api.frontegg.com/', 'contextResolver' => function(RequestInterface $request) { return [ 'tenantId' => 'THE-TENANT-ID', 'userId' => 'test-user-id', 'permissions' => [], ]; }, 'disableCors' => false, ]; $frontegg = new Frontegg($config); $response = $frontegg->forward($request); return $response->getBody(); }
另一个原始PHP的示例,并展示了如何将请求参数适配到Psr-7 Request对象。
<?php use Frontegg\Frontegg; use Psr\Http\Message\RequestInterface; use GuzzleHttp\Psr7\Request; $requestMethod = $_SERVER['REQUEST_METHOD']; $requestUri = str_replace('/api/frontegg', '', $_SERVER['REQUEST_URI']); $httpHeaders = getallheaders(); $body = http_build_query($requestMethod === 'GET' ? $_GET : $_POST); // Here you can see how to setup Psr-7 Request object. $adapterRequest = new Request($requestMethod, $requestUri, $httpHeaders, $body); $clientId = 'CLIENT_ID'; $apikey = 'API_KEY'; $tenantId = 'THE_TENANT_ID'; $config = [ 'clientId' => $clientId, 'clientSecret' => $apikey, 'apiBaseUrl' => 'https://api.test.com/', 'contextResolver' => function(RequestInterface $request) use ($tenantId) { return [ 'tenantId' => $tenantId, 'userId' => 'test-user-id', 'permissions' => [], ]; }, 'disableCors' => false, ]; $frontegg = new Frontegg($config); $response = $frontegg->forward($adapterRequest); print $response->getBody();