sluther / oauth2-reddit
league/oauth2-client 的 Reddit OAuth2 提供商
v2.0.3
2022-07-03 15:11 UTC
Requires
- php: >=7.0.0
- league/oauth2-client: ^2.2
Requires (Dev)
- phpunit/phpunit: ^9.5.0
README
此包为 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 转义回来时,你会收到 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 ]);
对于机密客户端(网页应用程序/脚本)
$accessToken = $reddit->getAccessToken('client_credentials');
刷新访问令牌
获取刷新令牌的唯一方法是通过设置为期限为 "永久" 的状态和代码重定向流程。生成的访问令牌将具有有效的 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)
来访问。
注意:即将发布的 v1.0.0 版本的 thephpleague/oauth2-client 将通过提供可以调整每个请求的认证请求对象来简化这一过程。
在此之前,建议您使用专用的 HTTP 客户端或提供者使用的客户端。
$client = $reddit->getHttpClient(); // Guzzle 3