API Token Authentication

cjjian發表於2017-01-16

Laravel 5.2 新增了很多的新特性,包括了內建多使用者認證表單陣列輸入驗證隱式路由模型繫結中介軟體組的定義中介軟體 throttle 訪問頻率限制等主要功能。

即將釋出的 Laravel 5.3 也新增了不少新的特性:全域性輔助函式 cache() 查詢構造器 where / update 新增 JSON 屬性操作語法Blade 模板新增 $loop 變數更簡單的分頁實現圖片尺寸驗證規則等。Laravel 5.3 相對於 Laravel 5.2 變化有點大,簡化了 app 的目錄結構,並將路由分離出來。

本文主要介紹一下 Laravel 5.2 下使用 API Token Authentication, Laravel 5.2 帶有了 TokenGuard 類。你可以讓使用者的 api_token 追加到 API 請求的後面,並用 api_token 驗證請求,分為 Laravel5.2Laravel5.2 版本。

設定 api_token 欄位並修改 User 模型

首先:

你要先給你的 users 表新增 api_token 的欄位。

// Laravel5.2 和 Laravel5.3 一樣
$table->string('api_token', 60)->unique();

如果你的專案剛建立,將上述的欄位新增到 users_table migration

如果你的專案並不是新建立的,那麼你可以去新增一個 migrationusers 表新增 api_token 欄位。

然後:

User 模型中的 $fillable$hidden 新增 api_token 欄位

// Laravel5.2 和 Laravel5.3 一樣

project $fillable = ['name', 'email', 'password', 'api_token'];

project $hidden = ['password', 'remember_token', 'api_token'];

使用者建立時預設生成 api_token

由於 Laravel5.2Laravel5.3 建立內建的使用者認證目錄結構不一樣,所以:
Laravel5.2:只需在 App\Http\Controllers\Auth\AuthController 中的 create 方法新增:
Laravel5.3:則在 App\Http\Controllers\Auth\RegisterController 中的 create 方法新增:

//將此程式碼新增到建立使用者的陣列中
'api_token' => str_random(60)

新增相對應的路由

我們要確保我們所有的 API 都透過使用 auth:api 中介軟體保護。

Laravel5.2

//將此程式碼放置到路由中。
Route::group([
    'prefix'     => 'api',
    'middleware' => ['api', 'auth:api']
], function () {
    //Write Routes
});

Laravel5.3:由於 Laravel5.3 已將 api 的路由單獨分離出來,因此只需在 routes\api.php 中新增路由規則。路由組定義可以到 app\Providers\RouteServiceProvider 中的 mapApiRoutes 方法檢視。

透過在 auth 中介軟體後新增 :api ,告訴 Laravel 我們想使用設定在 config/auth.php 下的 apiguard 和 預設為 token

任何在 API 路由組的路由,所有的請求都需要驗證 api_token

獲取 User 記錄

// Laravel5.2 和 Laravel5.3 一樣
Auth::guard('api')->user();

這樣的寫法是為了讓 Laravel 知道,我們想呼叫的是 api guard,而不是呼叫預設的 web guard

本文參照API Token Authentication in Laravel 5.2

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Nothing is impossible. —— @Jiajian Chan

相關文章