iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
0
Software Development

後端基礎PHP+Mysql & Laravel 30日養成計畫系列 第 30

Day 30 Laravel 5.8 會員註冊及登入系統API: Middelware、Router、 PostMan 測試

  • 分享至 

  • xImage
  •  

身份驗證設定

在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:

  • middleware驗證要走的路:Route::middleware(‘auth:api’) → 驗證後面帶的參數,這邊的auth是對應到config/auth裡的guard下定義的驗證方式。

Route

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測試

先去裝好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();

例如,管理者註冊:
https://ithelp.ithome.com.tw/upload/images/20191015/20120024LcQE95VutB.png
https://ithelp.ithome.com.tw/upload/images/20191015/20120024NYxNUPZGq6.png
拿到api token後,點Authorization,type選Bearer Token:
除了登入之外,其他無論查看、編輯、刪除等動作都是依這組token驗證使用者身份。
例如,管理者刪除會員:
https://ithelp.ithome.com.tw/upload/images/20191015/20120024u6XosXy4LM.png
https://ithelp.ithome.com.tw/upload/images/20191015/20120024h6sopDS5pu.png

Laravel新手常見錯誤

  • 如果terminal上出現這個:Invalid request (Unsupported SSL request),在本機開發這個階段,還未設置有效的SSL certificate前,是只有支援非加密的HTTP請求的,會出現這個錯誤通常表示你網址多打一個s,使用了HTTPS發送請求而非HTTP。
  • 如果URL已經打了api但還是只能看到Laravel首頁,這八成表示你的程式碼有問題,Laravel自動幫你跳轉回首頁了。要debug前,先在header加入這個:Accept:application/json,表示回傳的內容只接受json格式。
  • 錯誤訊息:"SQLSTATE[HY000]: General error: 1364 Field '欄位名稱' doesn't have a default value:去檢查Model的fillable中有沒有增加到這個欄位。
    *資料欄位該填的明明都已經填好了,卻還是得到這樣的回覆 "message": "The given data was invalid." :可能body的欄位名稱和request->['欄位']其中一個打錯了,這兩邊的欄位名稱必須一致。

上一篇
Day 29 Laravel 5.8 會員註冊及登入系統API:Model & Controller
下一篇
Day 31 用Laravel儲存圖片
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
Howard
iT邦新手 4 級 ‧ 2019-10-16 22:05:37

賀完賽/images/emoticon/emoticon64.gif

0
jing_5566
iT邦新手 5 級 ‧ 2020-01-23 12:37:39

fillable 真的常常忘記...

我要留言

立即登入留言