[簡記] Laravel 5.2+ api token authentication usage
發表於 : 2019-03-14 22:23:53
https://blog.4ze.tw/laravel-5-api-token ... ion-usage/
Laravel新手很難理解其精練美麗的程式碼中背後到底施了什麼黑魔法。自從Passport(Oauth)成為官方推薦的API驗證方法時,我們也很難在官方的文件中找到其實有Passport以外的API驗證方法。但其實是有的——API Token Authentication。在本文中我不探討其原始程式碼與具體的實作細節(因為我也不是很會XD),僅僅讓讀者了解在Laravel 5.5的全新安裝的route/api.php程式碼裡,以下到底發生了什麼事:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
注意到auth:api,去翻文件也很難知道這是幹嘛的。
其實Laravel提供了一個Token Guard,負責驗證在request中附加的api_token是否符合資料庫users tables的api_token欄位。
Step 1:加入api_token欄位
在migration裡加入以下的程式碼:
$table->string('api_token', 60)->unique();
執行migrate就能夠在users表格中加入api_token欄位。
Step 2:將要受保護的路由都加入auth:api路由群組
Route::group(['prefix' => 'api', 'middleware' => 'auth:api'], function () {
// 加在這裡
});
之後所有受auth:api保護的路由都必須在request中加入api_token,並且與資料庫users表格的欄位符合才能通過驗證。
如何產生一個api_token
利用Laravel提供的str_random(60)即可。
如何在請求中附加api_token
在Header部份加入一個Authorization欄位,內容設定成Bearer api_token_here
例如:
Authorization: Bearer HYQtaOnM7nyBY8MPhAIyHpY0I8jOmyJBPHGYPmXllyLy6byFP1kg0BHYqQkI
當然那一段是亂碼,要替換成實際運用的api_token呀~
Laravel新手很難理解其精練美麗的程式碼中背後到底施了什麼黑魔法。自從Passport(Oauth)成為官方推薦的API驗證方法時,我們也很難在官方的文件中找到其實有Passport以外的API驗證方法。但其實是有的——API Token Authentication。在本文中我不探討其原始程式碼與具體的實作細節(因為我也不是很會XD),僅僅讓讀者了解在Laravel 5.5的全新安裝的route/api.php程式碼裡,以下到底發生了什麼事:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
注意到auth:api,去翻文件也很難知道這是幹嘛的。
其實Laravel提供了一個Token Guard,負責驗證在request中附加的api_token是否符合資料庫users tables的api_token欄位。
Step 1:加入api_token欄位
在migration裡加入以下的程式碼:
$table->string('api_token', 60)->unique();
執行migrate就能夠在users表格中加入api_token欄位。
Step 2:將要受保護的路由都加入auth:api路由群組
Route::group(['prefix' => 'api', 'middleware' => 'auth:api'], function () {
// 加在這裡
});
之後所有受auth:api保護的路由都必須在request中加入api_token,並且與資料庫users表格的欄位符合才能通過驗證。
如何產生一個api_token
利用Laravel提供的str_random(60)即可。
如何在請求中附加api_token
在Header部份加入一個Authorization欄位,內容設定成Bearer api_token_here
例如:
Authorization: Bearer HYQtaOnM7nyBY8MPhAIyHpY0I8jOmyJBPHGYPmXllyLy6byFP1kg0BHYqQkI
當然那一段是亂碼,要替換成實際運用的api_token呀~