搜尋
首頁php框架ThinkPHP在ThinkPHP6中使用JWT進行認證

在ThinkPHP6中使用JWT進行認證

Jun 21, 2023 pm 01:34 PM
thinkphpjwt認證程式設計認證

在現今網路應用大規模開發中,使用者的安全認證是不可或缺的一部分。為了確保使用者的安全,常見的做法是使用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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用