academe / googleapi
用于访问由用户授权的Google账户API的Laravel 5.4+包
Requires
- php: >=5.6.4
- laravel/framework: 5.4.*
This package is auto-updated.
Last update: 2024-08-23 04:27:07 UTC
README
快速总结
此包仍在开发中,但我已在生产中使用它。以下是对预期用例的简要描述。
这是Laravel的粘合剂和Google API客户端版本3的包装器。它提供用于非服务账户授权和撤销的路由,用于存储用户可能拥有的多个授权的模型和存储,以及用于加载和配置Google API客户端的帮助类。
其目的是允许Laravel用户通过您的应用程序验证自己的Google账户,以便您的应用程序可以代表该用户访问Google API。
最初它只是用于访问远程站点的Google Analytics,但可以通过范围使用任何Google API。
它将支持续订密钥,因此可以在用户不在场时离线访问API。
目标是使访问令牌续订对您的应用程序不可见。由于Google API客户端的编写方式,这可能并不完全可能,但我希望使用正确的包装器可以实现这一点。
您的应用程序需要在Google上进行注册,并需要声明它想要访问的上下文,即哪些API。提供API授权的最终用户(使用OAuth 2)不需要在其账户中设置任何特殊设置。
使用此包,单个用户可以授权访问Google账户,然后将其授权与多个用户共享。所有必要的授权详细信息都存储在模型存储中,而不是用户的会话中,因此访问模型实例就足以授权访问API。
我希望这已经设定了此包试图实现的环境。
要求
此包需要PHP >=5.6和Laravel >= 5.4
安装
通过composer安装 - 编辑您的composer.json
以要求该包。
"require": { "academe/googleapi": "1.*" }
然后在您的终端中运行composer update
以获取它。
或使用composer require academe/googleapi
Laravel
要在Laravel中使用,请将以下内容添加到您的config/app.php
中的providers
数组
Academe\GoogleApi\GoogleApiServiceProvider::class,
目前此包中没有facade。
使用此包
以下只是粗略的开发者使用说明。
- 安装包并运行数据库迁移。
- 设置Google API凭证(查看配置文件),确保已启用Analytics范围。
- 通过访问
route('academe_gapi_authorise')
开始授权 - 第一次尝试时,Google会抱怨重定向URL。只需遵循Google提供的说明将重定向URL添加到Google网络应用程序。
示例代码
允许当前用户授权API访问Analytics并返回到/home
URL的链接
<a href="{{ route('academe_gapi_authorise', ['final_url' => url('home')]) }}">GAPI Auth</a>
您还可以设置和添加范围。例如
// Or use "add_scopes" to add to the scopes already authenticated. <a href="{{ route('academe_gapi_authorise', ['scopes' => [Google_Service_Analytics::ANALYTICS_READONLY]]) }}">GAPI Auth</a>
您应该为此路由使用POST。如果您使用GET,则将为用户提供一个简单的表单以确认。
所有授权实例都有一个名称,这是每个Laravel用户唯一的列表。默认名称为“默认”。当通过添加参数'name' => '对用户有意义的名称'
到授权路由进行授权时,请指定一个名称。
获取访问API和访问的Analytics账户列表的权限
try { $client = \Academe\GoogleApi\Helper::getApiClient(\Academe\GoogleApi\Helper::getCurrentUserAuth('default')); $service = new Google_Service_Analytics($client); $accounts = $service->management_accountSummaries->listManagementAccountSummaries(); } catch (Exception $e) { // Invalid credentials, or any other error in the API request. $client = null; } if ($client) { foreach ($accounts->getItems() as $item) { // You wouldn't really echo anything in Laravel... echo "Account: " . $item['name'] . " (" . $item['id'] . ") <br />"; } }
一旦授权,访问令牌将自动刷新,只要刷新令牌没有被撤销。
academe_gapi_authorise
路由将撤销当前用户的授权。参数包括name
用于标识要撤销哪个授权。应使用DELETE
HTTP方法调用此路由。如果使用GET
方法,将提供一个简单的确认表单。
其他注意事项
- 当Laravel用户提供授权时,我们会获取Google用户ID和他们的电子邮件地址。此ID对Google账户是唯一的。有了这个,我们可以找到任何授权超过一次的Google用户。虽然这是允许的,但它使用了Google提供的有限数量的令牌,因此这允许找到并合并任何重复项。
- 每个用户可以有大约25个活动令牌,因此用户可以多次授权同一应用程序。我们不会使用此包阻止这种情况发生,但是我们提供了一个“名称”来区分每个授权实例。
- 作用域存储在每个授权中,因此如果需要可以扩展,通过重新授权提供增量授权。
待办事项
- 以某种方式处理我们未及时续订的过期访问令牌。这将导致使用时出现异常。操作将是捕获异常,尝试续订访问令牌,然后再次尝试相同的操作。如何包装它还不清楚。
- 考虑一种处理访问令牌续订上的竞争条件的方法。这可能不会成为问题,因为续订令牌可以重复使用,所以旧的访问令牌总会被异常捕获并续订。
- “offline”和“force”参数在每次授权时都会强制生成新的续订令牌。有时可能不需要授权离线使用。也可能不需要“force”,并且可以继续使用当前的刷新令牌。如果作用域发生变化,例如增加,则需要“force”。调查一下。
- 通过客户端创建(一个工厂?)的钩子将允许在创建时定制客户端。