rtheunissen/oauth2-reddit

league/oauth2-client的Reddit OAuth2提供程序

v2.0.2 2017-04-23 16:49 UTC

README

Build Status Scrutinizer Scrutinizer Coverage Latest Version License Join the chat at https://gitter.im/rtheunissen/oauth2-reddit

本包为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重定向回来时,你会收到codestate

$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字段。每次刷新当前令牌时,你应该使用相同的刷新令牌,并简单地更新其accessTokenexpires属性。

$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