JWT 外加 登入功能

用於用戶登入的認證,JWT用的是這套Tymon\JWTAuthFirebase\php-jwt

對於JWT相關的認識,請先花10分鐘去瀏覽我在PHP筆記撰寫得一篇文章

安裝

在專案資料夾開啟命令提示字元,輸入以下字串:

composer require firebase/php-jwt

產生套件設定

在命令提示字元執行以下字串,就可以將套件的config/jwt.php設定檔複製到我專案底下的設定檔目錄

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

產生JWT Secret Key

每個專案都應該有屬於自己的密鑰,在命令提示字元輸入以下字串便可以得到專屬密鑰

php artisan jwt:generate

產生的密鑰會設定在 config/jwt.php 中的 secret

// config/jwt.php
[
    'secret' => env('JWT_SECRET', 'your_personal_jwt_secret_key')
]

範例

這是JWT的controller,放置於App\Http\Controller\Auth資料夾

登入頁面login的controller,放置於App\Http\Controllers\Auth資料夾

這是登入時會用到function集中放於這個controller,放置於App\Service資料夾

JWT會用到的要素,其中頭部跟密鑰我放在config\jwt.php裡面,這樣比較方便修改。如下

以下是登入的流程圖

到這邊我想各位應該還會有其他的疑問:

  1. 如果使用者直接在網址後面輸入各頁面的名稱照理是直接導到那個頁面,但是這就違反登入的規則了,而且使用者也有分等級,有些頁面是不能進去的。

  2. 再來就是特定頁面指有特定使用者可以進入,這點要防範。

所以這邊順帶提一下,這邊我會用laravel裡面附帶的Middleware(中介層),透過它來做判斷,如果沒登入就直接輸入網址,還是會被導到登入頁面,如果沒權限就無法進入特定的頁面。

下面是Middleware我自行創建的一個檔案,放置於\App\Http\Middleware資料夾

然後在\App\Http\Kernel.php裡面要宣告這個資料夾的名稱,如下

然後我們要在使用者進入每個頁面之前要先做判斷,所以我們要從各頁面的route下手,在每個route後面加上->middleware()

裡面塞要執行哪個檔案,然後要傳什麼值進去,就可以判斷使用者能進去的頁面之中有沒有這個頁面。

Last updated

Was this helpful?