laravel5.7 安裝和部署dingo+passport
(1)passport
安裝
在開始之前, 請通過 Composer 包管理器安裝 Passport:
composer require laravel/passport
Passport 服務提供器使用框架註冊自己的資料庫遷移目錄,因此在註冊提供器後,就應該執行 Passport 的遷移命令來自動建立儲存客戶端和令牌的資料表:
php artisan migrate
{note} 如果你不打算使用 Passport 的預設遷移,你應該在
AppServiceProvider
的register
方法中呼叫Passport::ignoreMigrations
方法。 你可以用這個命令php artisan vendor:publish --tag=passport-migrations
匯出預設遷移。
接下來,執行 passport:install
命令來建立生成安全訪問令牌時所需的加密金鑰,同時,這條命令也會建立用於生成訪問令牌的「個人訪問」客戶端和「密碼授權」客戶端:
php artisan passport:install
上面命令執行後,請將 Laravel\Passport\HasApiTokens
Trait 新增到 App\User
模型中,這個 Trait 會給你的模型提供一些輔助函式,用於檢查已認證使用者的令牌和使用範圍:
<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiTokens, Notifiable; }
接下來,在 AuthServiceProvider
的 boot
方法中呼叫 Passport::routes
函式。這個函式會註冊發出訪問令牌並撤銷訪問令牌、客戶端和個人訪問令牌所必需的路由:
<?php namespace App\Providers; use Laravel\Passport\Passport; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { /** * 應用程式的策略對映。 * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; /** * 註冊任何認證/授權服務。 * * @return void */ public function boot() { $this->registerPolicies(); Passport::routes(); } }
最後,將配置檔案 config/auth.php
中授權看守器 guards
的 api
的 driver
選項改為 passport
。此調整會讓你的應用程式在在驗證傳入的 API 的請求時使用 Passport 的TokenGuard
來處理:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
(2) dingo
安裝
修改composer.json檔案,在 require中新增
"dingo/api": "2.0.0-alpha1"
然後使用命令列,進入專案目錄,執行
composer update
來更新、安裝新包
接下來就publish
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
建立Api
修改routes/api.php
<?php
$api = app("Dingo\Api\Routing\Router");
$api->version('v1', function ($api) {
$api->group(["namespace" => "App\Api\Controllers"], function ($api) {
//之後在這裡寫api
});
});
});
建立BaseController
<?php
namespace App\Api\V1\Controllers;
use Illuminate\Routing\Controller;
use Dingo\Api\Routing\Helpers;
class BaseController extends Controller
{
use Helpers;
//其他初始化操作
}