去config資料夾下面找auth這個檔案,總共有三個地方要改。
首先要把defaults的guard從web改成api:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
更改guards裡[api]的內容 :
driver是驗證方式,這邊要是token;
而provider則是資料庫的table名。
'guards' => [
'api' => [
'driver' => 'token',
'provider' => 'members',
'hash' => false,
],
底下的provider也要更改:
'members' => [
'driver' => 'eloquent',
'model' => App\Member::class,
],
要記得把上面的Model 改成extends Authenticatable
use Illuminate\Foundation\Auth\User as Authenticatable;
class Member extends Authenticatable{
//.....
再來是routes資料夾下的api.php:
Route::get
→ RESTFUL中的方法 postman測試時網址都一樣,是根據前面選擇不同的方法走不同的method。api.php
<?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驗證使用者身份。
例如,管理者刪除會員:
content type要是application/json才能看到response內容
The XX method is not support
:再撿查一次如果postman上的URL沒錯,method也沒選錯的話,可能是routes.php的路徑打錯。Invalid request (Unsupported SSL request)
,先檢查http有沒有多打一個s"SQLSTATE[HY000]: General error: 1364 Field '欄位名稱' doesn't have a default value
:去檢查Model的fillable中有沒有增加到這個欄位。"message": "The given data was invalid."
:可能body的欄位名稱和request->['欄位']其中一個打錯了,這兩邊的欄位名稱必須一致。"message": "Class '\\App\\User' not found"
,檢查config檔有沒有修改正確。"Method Illuminate\\Validation\\Validator::validateRequire does not exist."
,檢查XXcontroller@store(或任何有用到validate的method),是'required'不是'require' $request->validate([
'post' => ['required'],
]);