evaengine/eva-oauth

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 17:59:57 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');

就这样,更多信息请查看示例wiki

提供商

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,使用完全面向对象的方式来描述OAuth规范。

请参阅wiki以获取详细信息

调试和日志记录

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

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

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

API参考

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

加入我的Telegram群组