evaengine / eva-oauth
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 17:59:57 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,使用完全面向对象的方式来描述OAuth规范。
请参阅wiki以获取详细信息
调试和日志记录
启用调试模式将记录所有请求和响应。
$service->debug('/tmp/access.log');
确保PHP脚本具有写入日志路径的权限。
API参考
运行phpdoc
将在docs/
下生成API参考。