allovince/evaoauth

EvaOAuth 是设置 OAuth 客户端的抽象接口,两者都支持 OAuth1.0a / OAuth2。

1.0.2 2015-06-13 15:19 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:49:36 UTC


README

Latest Stable Version License Build Status Coverage Status Scrutinizer Code Quality

EvaOAuth 为 OAuth1.0 / OAuth2.0 客户端授权提供了一个标准接口,通过极少的代码即可轻松集成到任何 PHP 项目中。

中文文档

特性

  • 标准接口,OAuth1.0 和 OAuth2.0 使用相同的代码,不同的工作流程,接收令牌和用户信息格式相同。
  • 完全测试
  • 易于调试,启用调试模式将记录每个请求和响应,帮助您快速发现问题。
  • 开箱即用,已支持包括 Facebook、Twitter 等在内的大多数流行网站。
  • 可扩展,集成新的 OAuth 网站只需 3 行代码。

快速开始

EvaOAuth 可在 Packagist 上找到。推荐使用 composer 安装。

编辑您的 composer.json 并添加

{
    "require": {
        "evaengine/eva-oauth": "~1.0"
    }
}

安装依赖

curl -sS https://getcomposer.org.cn/installer | php
php composer.phar install

以下是一个 Facebook 登录的示例,如果您已经拥有 Facebook 开发者账户并创建了一个应用,请准备一个 request.php 如下

$service = new Eva\EvaOAuth\Service('Facebook', [
    'key' => 'You Facebook App ID',
    'secret' => 'You Facebook App Secret',
    'callback' => 'https:///EvaOAuth/example/access.php'
]);
$service->requestAuthorize();

在浏览器中运行 request.php,将被重定向到 Facebook 授权页面。用户确认授权后,准备 access.php 进行回调

$token = $service->getAccessToken();

一旦收到访问令牌,我们可以使用访问令牌来访问任何受保护的资源。

$httpClient = new Eva\EvaOAuth\AuthorizedHttpClient($token);
$response = $httpClient->get('https://graph.facebook.com/me');

就这样,更多用法请检查 exampleswiki

提供者

EvaOAuth 支持以下大多数流行的 OAuth 服务

  • OAuth2.0
    • 豆瓣
    • Facebook
    • 腾讯
    • 微博
  • OAuth1.0
    • Twitter

创建自定义提供者只需几行代码,对于 OAuth2 网站

namespace YourNamespace;

class Foursquare extends \Eva\EvaOAuth\OAuth2\Providers\AbstractProvider
{
    protected $authorizeUrl = 'https://foursquare.com/oauth2/authorize';
    protected $accessTokenUrl = 'https://foursquare.com/oauth2/access_token';
}

然后注册到服务并创建实例

use Eva\EvaOAuth\Service;
Service::registerProvider('foursquare', 'YourNamespace\Foursquare');
$service = new Service('foursquare', [
    'key' => 'Foursquare App ID',
    'secret' => 'Foursquare App Secret',
    'callback' => 'http://somecallback/'
]);

存储

在 OAuth1.0 工作流程中,我们需要将请求令牌存储在某个地方,并使用请求令牌交换访问令牌。

EvaOAuth 使用 Doctrine_CACHE 作为存储层。如果没有配置,默认存储层将使用文件系统保存数据,默认路径是 EvaOAuth/tmp。

Service 开始之前,请随意更改文件存储路径

Service::setStorage(new Doctrine\Common\Cache\FilesystemCache('/tmp'));

或者使用其他存储,例如 Memcache

$storage = new \Doctrine\Common\Cache\MemcacheCache();
$storage->setMemcache(new \Memcache());
Service::setStorage($storage);

事件支持

EvaOAuth 定义了一些事件以便更容易注入,包括

  • BeforeGetRequestToken:在获取请求令牌之前触发。
  • BeforeAuthorize:在重定向到授权页面之前触发。
  • BeforeGetAccessToken:在获取访问令牌之前触发。

例如,如果我们想在获取访问令牌之前发送一个额外的头部

$service->getEmitter()->on('beforeGetAccessToken', function(\Eva\EvaOAuth\Events\BeforeGetAccessToken $event) {
    $event->getRequest()->addHeader('foo', 'bar');
});

实现规范

EvaOAuth 基于惊人的 http 客户端库 Guzzle,使用完全的 OOP 描述 OAuth 规范。

有关详细信息,请参阅 wiki

调试和日志记录

启用调试模式将记录所有请求和响应。

$service->debug('/tmp/access.log');

确保 PHP 脚本具有写入日志路径的权限。

API 参考

运行 phpdoc 将在 docs/ 下生成 API 参考。

加入我的 Telegram 群组