14four / oauth2-basecamp
The PHP League OAuth2-Client 的 Basecamp OAuth 2.0 客户端提供程序
v1.0.12
2017-06-09 17:34 UTC
Requires
- league/oauth2-client: ^2.0
Requires (Dev)
- illuminate/support: ^5.4
- mockery/mockery: ^0.9.9
- orchestra/testbench: ^3.4
- phpunit/phpunit: ^5.0
This package is not auto-updated.
Last update: 2024-09-29 02:44:29 UTC
README
使用 League OAuth2 Client 为 PHP 提供Basecamp OAuth 2.0 客户端支持。
安装
使用 composer 安装
composer require 14four/oauth2-basecamp
配置 Laravel
设置服务提供者
将服务提供者添加到 config/app.php
文件中。
<?php //... 'providers' => [ //... FourteenFour\BasecampAuth\BasecampAuthServiceProvider::class, ], //...
设置别名
将外观添加到 config/app.php
文件中。
<?php //... 'aliases' => [ //... 'BasecampAuth' => FourteenFour\BasecampAuth\Facades\BasecampAuth::class, ], //...
配置设置
移动和配置配置文件。访问 basecamp 生成您的应用程序凭据。
php artisan --tag=config
现在配置配置文件。建议您使用 .env
文件存储客户端 ID 和客户端密钥。
BASECAMP_CLIENT_ID=
BASECAMP_CLIENT_SECRET=
注意: 您的重定向 URI 必须与 (Basceamp)[https://integrate.37signals.com/] 中的表示完全匹配
使用方法
要使用 Basecamp OAuth,您需要使用 FourteenFour\BasecampAuth\Provider\Basecamp
类。
<?php $provider = new \FourteenFour\BasecampAuth\Provider\Basecamp([ 'clientId' => '{your-basecamp-client-id}', 'clientSecret' => '{your-basecamp-client-secret}', 'redirectUri' => '{your-callback-url}', ]); if (!isset($_GET['code'])) { // If we don't have an authorization code then get one $authUrl = $provider->getAuthorizationUrl(); $_SESSION['oauth2state'] = $provider->getState(); header('Location: '.$authUrl); exit; // Check given state against previously stored one to mitigate CSRF attack } else if (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); exit('Invalid state'); } else { // Try to get an access token (using the authorization code grant) $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); // Optional: Now you have a token you can look up a users profile data try { // We got an access token, let's now get the user's details $user = $provider->getResourceOwner($token); // Use these details to create a new profile printf('Hello %s!', $user->getId()); } catch (Exception $e) { // Failed to get user details exit('Oh dear...'); } // Use this to interact with an API on the users behalf echo $token->getToken(); }
Laravel
以下是一个示例控制器,供您开始。
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use BasecampAuth; class BasecampAuthController extends Controller { public function auth( BasecampAuth $client ) { $authorizationUrl = $client::getAuthorizationUrl(); session(['basecampOauth2state' => $client::getState()]); header('Location: ' . $authorizationUrl); exit; } public function login( Request $request, BasecampAuth $client ) { if ($request->session()->has('state')empty($request->state) || (isset($_SESSION['basecampOauth2state']) && $request->state !== $_SESSION['basecampOauth2state'])) { if (isset ($_SESSION['basecampOauth2state'])) { unset($_SESSION['basecampOauth2state']); } abort(403, 'Unauthorized action.'); } $accessToken = $client::getAccessToken('authorization_code', ['code' => $request->code]); $resourceOwner = $client::getResourceOwner( $accessToken ); dd( $resourceOwner->toArray() ); } }
生成文档
获取 Sami(仅需要一次)。
composer run-script getsami
运行 Sami
omposer run-script docs