rtheunissen / oauth2-reddit
league/oauth2-client的Reddit OAuth2提供程序
v2.0.2
2017-04-23 16:49 UTC
Requires
- php: >=5.6.0
- league/oauth2-client: ^2.2
Requires (Dev)
- phpunit/phpunit: ^5.0
README
本包为thephpleague/oauth2-client提供Reddit集成。
安装
composer require rtheunissen/oauth2-reddit
使用方法
use Rudolf\OAuth2\Client\Provider\Reddit; $reddit = new Reddit([ 'clientId' => 'yourClientId', 'clientSecret' => 'yourClientSecret', 'redirectUri' => 'yourRedirectUri', 'userAgent' => 'platform:appid:version, (by /u/username)', 'scopes' => ['identity', 'read', ...], ]);
请求访问令牌
有四种不同的方式来请求访问令牌,你应该能够根据你应用程序的性质确定使用哪种。
请阅读Reddit OAuth2 Wiki获取更多信息。
对于Web应用程序,使用'code'和'state'
$url = $reddit->getAuthorizationUrl([ 'duration' => $duration, // "permanent" or "temporary" by default ]);
当从Reddit重定向回来时,你会收到code
和state
。
$accessToken = $reddit->getAccessToken('authorization_code', [ 'code' => $code, 'state' => $state ]);
对于个人使用的脚本,使用'username'和'password'
$accessToken = $reddit->getAccessToken('password', [ 'username' => $username, 'password' => $password, ]);
对于已安装的应用程序
你应该在客户端生成并保存唯一的ID。该ID应该是你的应用程序的每个设备或每个用户的唯一标识。生成ID时可以使用随机或伪随机值;然而,在续订访问令牌时,你应该保留并重新使用相同的device_id。
$accessToken = $reddit->getAccessToken('installed_client', [ 'device_id' => $deviceId, // 20-30 character ASCII string ]);
对于机密客户端(Web应用程序/脚本)
$accessToken = $reddit->getAccessToken('client_credentials');
刷新访问令牌
获取刷新令牌的唯一方法是通过使用state和code重定向流程,并将持续时间设置为"永久"。生成的访问令牌将有一个有效的refreshToken
属性,你可以使用它来刷新令牌。
请注意,刷新后的令牌将没有refreshToken
字段。每次刷新当前令牌时,你应该使用相同的刷新令牌,并简单地更新其accessToken
和expires
属性。
$refreshToken = $reddit->getAccessToken('refresh_token', [ 'refresh_token' => $accessToken->refreshToken ]); $accessToken->accessToken = $refreshToken->accessToken; $accessToken->expires = $refreshToken->expires; // Remember to re-store the refreshed access token at this point
使用访问令牌
Reddit在执行认证API请求时需要一些授权头。这些可以通过使用$reddit->getHeaders($token)
来访问。
注意:即将发布的thephpleague/oauth2-client v1.0.0版本将通过提供可以调整每个请求的认证请求对象来使这更容易。
在此之前,建议使用专用HTTP客户端或提供者使用的客户端。
$client = $reddit->getHttpClient(); // Guzzle 3