sluther/oauth2-reddit

league/oauth2-client 的 Reddit OAuth2 提供商

v2.0.3 2022-07-03 15:11 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 sluther/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 以获取更多信息。

对于网页应用程序,使用 '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
]);
对于机密客户端(网页应用程序/脚本)
$accessToken = $reddit->getAccessToken('client_credentials');

刷新访问令牌

获取刷新令牌的唯一方法是通过设置为期限为 "永久" 的状态和代码重定向流程。生成的访问令牌将具有有效的 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) 来访问。

注意:即将发布的 v1.0.0 版本的 thephpleague/oauth2-client 将通过提供可以调整每个请求的认证请求对象来简化这一过程。

在此之前,建议您使用专用的 HTTP 客户端或提供者使用的客户端。

$client = $reddit->getHttpClient(); // Guzzle 3