前言
本文為參考〈Developing RESTful APIs with Lumen〉一文的學習筆記。
環境
- Windows 7
- Apache 2.4.33
- MySQL 5.7.21
- PHP 7.2.4
安裝 Postman
到 Postman 下載電腦安裝版。
新增遷移
新增 users
資料表。
1
| php artisan make:migration create_users_table
|
配置欄位。
1 2 3 4 5 6 7
| Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email'); $table->string('password'); $table->timestamps(); });
|
新增填充
新增 UsersTableSeeder
填充。
1
| php artisan make:seeder UsersTableSeeder
|
建立一名測試用使用者帳號。
1 2 3 4 5
| App\User::create([ 'name' => 'test', 'email' => '[email protected]', 'password' => app('hash')->make('secret'), ]);
|
執行遷移。
1
| php artisan migrate --seed
|
新增模型
手動在 app
資料夾新增 User
模型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject {
public function getJWTIdentifier() { return $this->getKey(); }
public function getJWTCustomClaims() { return []; } }
|
新增路由
1 2 3 4 5
| $router->post('auth/login', 'AuthController@login');
$router->group(['middleware' => 'auth:api'], function($router) { $router->get('/', ['as' =>'index', 'uses' => 'UserController@index']); });
|
新增控制器
手動在 app\Http\Controllers
資料夾新增 UserController
控制器。
1 2 3 4 5 6 7 8 9 10 11 12
| namespace App\Http\Controllers;
use Illuminate\Http\Request; use Auth; use App\User;
class UserController extends Controller { public function index(Request $request) { return response()->json(Auth::user()); } }
|
手動在 app\Http\Controllers
資料夾再新增 AuthController
控制器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| namespace App\Http\Controllers;
use Illuminate\Http\Request; use Tymon\JWTAuth\JWTAuth;
class AuthController extends Controller { protected $jwt;
public function __construct(JWTAuth $jwt) { $this->jwt = $jwt; }
public function login(Request $request) { if (!$token = $this->jwt->attempt($request->only('email', 'password'))) { return response()->json(['user_not_found'], 404); }
return response()->json(compact('token')); } }
|
發起 HTTP 請求
向 http://localhost/lumen/public 發起 GET
請求,得到回應如下:
在 Body
輸入以下鍵値再向 http://localhost/lumen/public/auth/login 發起 POST
請求:
得到回應如下:
1 2 3
| { "token": "eyJ0e……q5o0M" }
|
最後在 Headers
輸入以下鍵値,再向 http://localhost/lumen/public 發起 GET
請求。
(Value 的部分為:Bearer + 空一格 + Token)
Key |
Value |
Authorization |
Bearer eyJ0e……q5o0M |
結果得到回應如下:
1 2 3 4 5 6 7
| { "id": 2, "name": "Tester", "email": "[email protected]", "created_at": "2018-04-19 11:38:53", "updated_at": "2018-04-19 11:38:53" }
|
程式碼