1.在應(yīng)用目錄下執(zhí)行 php artisan make:auth 和 php artisan migrate命令,生成用戶登錄和注冊的所有東西。
2.瀏覽器訪問 http://your-app.dev/register,進行用戶注冊。
3.使用 Composer 包管理器安裝 Passport:
composer require laravel/passport
4.接下來,在配置文件config/app.php的providers數(shù)組中注冊 Passport 服務(wù)提供者:
Laravel\Passport\PassportServiceProvider::class,
Passport 服務(wù)提供著為框架注冊了自己的數(shù)據(jù)庫遷移目錄,所以在注冊之后需要遷移數(shù)據(jù)庫,Passport 遷移將會為應(yīng)用生成用于存放客戶端和訪問令牌的數(shù)據(jù)表:
php artisan migrate
5.接下來,需要運行passport:install命令,該命令將會創(chuàng)建生成安全訪問令牌(token)所需的加密鍵,此外,該命令還會創(chuàng)建“personal access”和“password grant”客戶端用于生成訪問令牌:
php artisan passport:install
運行完這個命令后,添加Laravel\Passport\HasApiTokenstrait 到App\User模型,該 trait 將會為模型類提供一些輔助函數(shù)用于檢查認證用戶的 token 和 scope:
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方法中調(diào)用Passport::routes方法,該方法將會注冊發(fā)布/撤銷訪問令牌、客戶端以及私人訪問令牌所必需的路由:
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();
}
}
最后,在配置文件config/auth.php中,需要設(shè)置api認證 guard 的driver選項為passport。這將告知應(yīng)用在認證輸入的 API 請求時使用 Passport 的TokenGuard:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
6.密碼授權(quán)令牌
創(chuàng)建一個密碼發(fā)放客戶端
在應(yīng)用可以通過密碼授權(quán)頒發(fā)令牌之前,需要創(chuàng)建一個密碼授權(quán)客戶端,你可以通過使用帶--password選項的passport:client命令來實現(xiàn)。如果你已經(jīng)運行了passport:install命令,則不必再運行這個命令:
php artisan passport:client --password
通過postman或者其他調(diào)試工具,請求http://your-app.com/oauth/token進行授權(quán),授權(quán)成功返回想要的access_tokenhe 和refresh_token,最后測試。
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
],