首頁  >  文章  >  php框架  >  在ThinkPHP6中使用JWT進行認證

在ThinkPHP6中使用JWT進行認證

王林
王林原創
2023-06-21 13:34:401991瀏覽

在現今網路應用大規模開發中,使用者的安全認證是不可或缺的一部分。為了確保使用者的安全,常見的做法是使用JSON Web Token(JWT)進行身份驗證。它可以輕鬆有效地實現使用者身份驗證和權限控制。在本文中,我們將介紹如何在ThinkPHP6專案中使用JWT進行認證。

什麼是JSON Web Token?

JSON Web Token(JWT)是一種輕量級的身份驗證機制。它的作用是在網路上安全地傳輸聲明,它可以被用作身份驗證和聲明交換的一種方式。 JWT包含在HTTP請求標頭或URL參數中,所以很容易便捷地在服務端和用戶端之間傳輸。

JWT由三個部分組成:頭部、負荷和簽名。頭部包含了描述簽名演算法和類型的信息,載荷包含了聲明和數據信息,簽名則用於驗證JWT的合法性。 JWT的負載中可以儲存任何數據,你可以自訂需要的資訊。

在ThinkPHP6中使用JWT進行認證的步驟

步驟一:安裝 jwt-auth 擴充功能

首先,我們需要在專案中引入 jwt-auth 擴充。在 composer.json 檔案中加入以下依賴:

"tymon/jwt-auth": "^1.0.0-rc.5"

在安裝完依賴後使用 composer update 更新一下。

步驟二:產生設定檔

執行下面的指令產生設定檔:

php think jwt:publish

產生設定檔後,我們需要修改配置,設定JWT 金鑰和有效期限等參數,修改/config/jwt.php 檔案即可。

步驟三:寫認證中間件

JWT 的認證過程需要在伺服器端完成。因此,我們需要建立一個中間件 AuthMiddleware,在請求到達控制器前,對 JWT 進行認證。

首先,我們需要建立AuthMiddleware 檔案:

php think make:middleware AuthMiddleware

在AuthMiddleware 檔案中,我們可以使用以下程式碼對JWT 進行認證:

<?php
namespace appmiddleware;

use thinkacadeRequest;
use TymonJWTAuthExceptionsTokenExpiredException;
use TymonJWTAuthFacadesJWTAuth;
use thinkexceptionHttpException;

class AuthMiddleware
{
    public function handle($request, Closure $next)
    {
        //获取JWT token
        $token = JWTAuth::getToken();
        if (!$token) {
            throw new HttpException(401, 'Token not provided');
        }

        try {
            //验证JWT token
            $user = JWTAuth::authenticate($token);
            $request->user = $user;
        } catch (TokenExpiredException $exception) {
            throw new HttpException(401, 'Token expired');
        } catch (Exception $exception) {
            throw new HttpException(401, 'Token invalid');
        }

        return $next($request);
    }
}

在handle 函數中,我們首先獲取JWT 的token。如果 token 不存在,就會拋出 401 個例外。

如果 token 存在,我們就使用 JWTAuth::authenticate($token) 來驗證token的合法性,成功則將使用者資訊綁定到請求上下文中。

要注意的是,在上述程式碼中,所有拋出例外的情況都會回傳 401 錯誤代碼。

步驟四:使用中介軟體進行認證

在控制器中使用AuthMiddleware 中介軟體進行驗證,如下所示:

<?php
namespace appcontroller;

use appmiddlewareAuthMiddleware;

class UserController extends Base
{
    protected $middleware = [
        AuthMiddleware::class
    ];

    public function index()
    {
        return json($this->request->user, 200);
    }
}

在上述程式碼中,我們向控制器新增了一個AuthMiddleware 中間件,因此在請求到達控制器之前將會自動執行該中間件。

控制器的 index 方法傳回目前請求使用者的訊息,如果 JWT 認證正確,將傳回 json 格式的使用者資訊。

結論

本文介紹如何在ThinkPHP6專案中使用JWT進行認證。我們透過安裝 JWT 擴充功能和產生設定檔、編寫認證中間件、使用中間件等步驟,詳細介紹了 JWT 身份驗證的實作過程。這個過程中,我們對JWT的相關知識有了更深入的了解,也為未來的網路開發提供了有價值的經驗。

以上是在ThinkPHP6中使用JWT進行認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn