academe/googleapi

用于访问由用户授权的Google账户API的Laravel 5.4+包

1.0.0 2017-07-06 12:38 UTC

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”。调查一下。
  • 通过客户端创建(一个工厂?)的钩子将允许在创建时定制客户端。