1.首先經過 Composer 包管理器安裝 Passport:php
composer require laravel/passport
注:若是安裝過程當中提示須要更高版本的 Laravel:
laravel/passport v5.0.0 requires illuminate/http ~5.6
,能夠經過指定版原本安裝composer require laravel/passport ~4.0
。html
2.註冊服務提供者laravel
將 Passport
的服務提供者註冊到配置文件 config/app.php
的 providers
數組中web
Laravel\Passport\PassportServiceProvider::class,
Laravel 5.5以後會自動註冊服務提供者數據庫
3.遷移數據庫api
php artisan migrate
注:若是你不想使用 Passport 的默認遷移,須要在
AppServiceProvider
的register
方法中調用Passport::ignoreMigrations
方法。你能夠使用php artisan vendor:publish --tag=passport-migrations
導出默認遷移。數組
第一次部署 Passport 到生產服務器時,可能須要運行 passport:keys
命令。這個命令生成 Passport 須要的加密 keys 以便生成訪問令牌,生成的 keys 將不會存放在源代碼控制中:安全
php artisan passport:keys
4.建立生成安全訪問令牌(token)所需的加密鍵服務器
須要運行 passport:install
命令,該命令將會建立生成安全訪問令牌(token)所需的加密鍵,此外,該命令還會建立「personal access」和「password grant」客戶端用於生成訪問令牌:session
php artisan passport:install
生成記錄存放在數據表 :oauth_clients

5.運行完這個命令後,添加 Laravel\Passport\HasApiTokens
trait 到 App\User
模型,該 trait 將會爲模型類提供一些輔助函數用於檢查認證用戶的 token 和 scope:
<?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; }
6.接下來,你須要在 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 { /** * The policy mappings for the application. * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); Passport::routes(); } }
7.最後,在配置文件 config/auth.php
中,須要設置 api
認證 guard 的 driver
選項爲 passport
。這將告知應用在認證輸入的 API 請求時使用 Passport 的 TokenGuard
:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
OAuth2 密碼受權容許你的其餘第一方客戶端,例如移動應用,使用郵箱地址/用戶名+密碼獲取訪問令牌。這使得你能夠安全地頒發訪問令牌給第一方客戶端而沒必要要求你的用戶走整個 OAuth2 受權碼重定向流程。
在應用能夠經過密碼受權頒發令牌以前,須要建立一個密碼受權客戶端,你能夠經過使用帶 --password
選項的 passport:client
命令來實現。若是你已經運行了 passport:install
命令,則沒必要再運行這個命令:
php artisan passport:client --password
這裏咱們使用一開始經過 passport:install
命令建立的記錄做爲測試記錄。
建立完密碼受權客戶端後,能夠經過發送 POST
請求到 /oauth/token
路由(帶上用戶郵箱地址和密碼)獲取訪問令牌。這個路由已經經過 Passport::routes
方法註冊過了,不須要手動定義。若是請求成功,就能夠從服務器返回的 JSON 響應中獲取 access_token
和 refresh_token
和經過受權碼返回數據格式一致。
這裏的username使用的是email,若是想要經過name、iphone來獲取,須要在users模型中添加一下方法
// 容許passport經過這些字段找到你的用戶實例 public function findForPassport($name) { $user = Users::where('name', $name) // ->orWhere('phone', $name) ->orWhere('email', $name) ->first(); return $user; }
注:記住,訪問令牌默認長期有效,不過,若是須要的話你也能夠配置訪問令牌的最長生命週期。
友情連接: