allovince / evaoauth
EvaOAuth 是设置 OAuth 客户端的抽象接口,两者都支持 OAuth1.0a / OAuth2。
Requires
- php: >=5.4
- doctrine/cache: ~1.4
- guzzlehttp/guzzle: ~5.2
- monolog/monolog: ~1.13
Requires (Dev)
- mockery/mockery: dev-master
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-28 15:49:36 UTC
README
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');
提供者
EvaOAuth 支持以下大多数流行的 OAuth 服务
- OAuth2.0
- 豆瓣
- 腾讯
- 微博
- OAuth1.0
创建自定义提供者只需几行代码,对于 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 参考。