在Laravel中,config/auth.php 文件是用來配置身份驗證相關設置的。
首先要把defaults的guard從web改成api,告訴Laravel你的請求要走api guard的驗證邏輯:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
更改guards裡[api]的內容 :
driver是驗證方式,這邊要是token;
provider的value必須與你在 providers 中配置的鍵名一致,。
'guards' => [
'api' => [
'driver' => 'token',
'provider' => 'members',
'hash' => false,
],
'providers' => [
'members' => [
'driver' => 'eloquent',
'model' => App\Member::class,
],
],
把Member Model 改成extends Authenticatable,讓Member model能和Laravel的身份驗證機制互動:
use Illuminate\Foundation\Auth\User as Authenticatable;
class Member extends Authenticatable{
//.....
Authenticatable是Laravel已經預先準備好的身份驗證功能,提供多種方法如獲取使用者密碼、重設密碼、透過middleware做身份檢查等,讓我們可以直接套用而不用自己重刻一套驗證機制,對於快速開發一個需要登入系統的應用程式是非常方便的。
再來是routes資料夾下的api.php:
routes/api.php
這是Laravel專門用來設定api routes的檔案,定義每支API的url、HTTP method及對應的controller和method
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::middleware('auth:api')->get('/member', function (Request $request) {
return $request->member();
});
Route::post('member', 'MemberController@store'); //註冊
Route::post('login', 'LoginController@login'); //登入
Route::middleware('auth:api')->get('member', 'MemberController@index'); //查看
Route::middleware('auth:api')->put('member', 'MemberController@update'); //編輯
Route::middleware('auth:api')->delete('member/{members}', 'MemberController@destroy'); //刪除
Route::middleware('auth:api')->get('logout', 'LogoutController@logout'); //登出
先去裝好PostMan
cd到專案目錄下,打開server:
$php artisan serve
接著打開post man,如下表所示,URL依照要執行的動作輸入。
動作 | HTTP Method | URL |
---|---|---|
會員註冊 | post | http://localhost:8000/api/member |
管理者註冊 | post | http://localhost:8000/api/admin |
會員登入 | post | http://localhost:8000/api/login |
會員查看 | get | http://localhost:8000/api/member |
會員編輯 | put | http://localhost:8000/api/member |
會員刪除 | delete | http://localhost:8000/api/member/member_id |
會員登出 | get | http://localhost:8000/api/logout |
將資料放在body(form-data或x-www-form-urlencoded)傳送,欄位名稱要和這邊的一樣
$request->validate([
'email' => ['required', 'string', 'email', 'max:255', 'unique:members'],
'password' => ['required', 'string', 'min:6', 'max:12'],
]);
登入會員的欄位名稱要和$request->XXX一樣:
$member = Member::where('email', $request->email)->where('password', $request->password)->first();
例如,管理者註冊:
拿到api token後,點Authorization,type選Bearer Token:
除了登入之外,其他無論查看、編輯、刪除等動作都是依這組token驗證使用者身份。
例如,管理者刪除會員:
Invalid request (Unsupported SSL request)
,在本機開發這個階段,還未設置有效的SSL certificate前,是只有支援非加密的HTTP請求的,會出現這個錯誤通常表示你網址多打一個s,使用了HTTPS發送請求而非HTTP。"SQLSTATE[HY000]: General error: 1364 Field '欄位名稱' doesn't have a default value
:去檢查Model的fillable中有沒有增加到這個欄位。"message": "The given data was invalid."
:可能body的欄位名稱和request->['欄位']其中一個打錯了,這兩邊的欄位名稱必須一致。