国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php框架 ThinkPHP 在ThinkPHP6中使用JWT驗(yàn)證

在ThinkPHP6中使用JWT驗(yàn)證

Jun 20, 2023 pm 11:36 PM
thinkphp 程式設(shè)計(jì) jwt驗(yàn)證

隨著網(wǎng)路的發(fā)展,Web應(yīng)用的使用者量逐漸增多,安全問題也成為了越來越重要的議題。身份驗(yàn)證是Web應(yīng)用程式安全的重要組成部分,因?yàn)橹挥薪?jīng)過身份驗(yàn)證的使用者才能存取需要權(quán)限的資源。

JSON Web Token (JWT) 是一種輕巧、自包含的認(rèn)證 token,是在 Web 應(yīng)用間安全地傳輸資訊的好方法。 JWT 認(rèn)證方案適用於分散式系統(tǒng)和單頁應(yīng)用。

ThinkPHP是一個(gè)流行的PHP框架,它提供了許多工具來開發(fā)安全的網(wǎng)路應(yīng)用程式。在本文中,我們將介紹如何在ThinkPHP6中使用JWT進(jìn)行身份驗(yàn)證以增強(qiáng)應(yīng)用程式的安全性。

開發(fā)環(huán)境和依賴

在開始之前,我們需要確保開發(fā)環(huán)境已經(jīng)正確設(shè)定。以下是本文所使用的環(huán)境和依賴。請根據(jù)您的需求進(jìn)行相應(yīng)地更改。

  • PHP 7.2 或更高版本
  • ThinkPHP 6.0.0 或更高版本
  • Firebase JWT PHP 函式庫

#步驟1 :安裝Firebase JWT PHP 函式庫

安裝Firebase JWT PHP 函式庫是使用JWT 驗(yàn)證方案的第一步。該庫將幫助我們創(chuàng)建、簽名和驗(yàn)證 JWT。

我們可以使用 Composer 安裝 Firebase JWT PHP 函式庫。在命令列中輸入以下命令:

composer require firebase/php-jwt

步驟2:建立Token類別

為了方便管理和使用 JWT,我們建立一個(gè)名為Token的類別來處理 JWT 驗(yàn)證的各個(gè)方面。這個(gè)類別將包括創(chuàng)建令牌,驗(yàn)證令牌,取得令牌資訊等功能。

在app/common 目錄下建立Token.php 文件,並加入以下程式碼:

<?php

namespace appcommon;

use FirebaseJWTJWT;

class Token
{
    private static $key = 'your_secret_key';
    private static $alg = 'HS256';

    public static function createToken($data, $expiration = 3600)
    {
        $payload = [
            'iss' => 'localhost',
            'sub' => 'token',
            'iat' => time(),
            'exp' => time() + $expiration,
            'data' => $data
        ];

        return JWT::encode($payload, self::$key, self::$alg);
    }

    public static function decodeToken($token)
    {
        return JWT::decode($token, self::$key, [self::$alg]);
    }

    public static function getDataByToken($token)
    {
        $decoded = self::decodeToken($token);

        if (isset($decoded->data)) {
            return $decoded->data;
        } else {
            return false;
        }
    }

    public static function verifyToken($token)
    {
        $result = false;
        try {
            $decoded = self::decodeToken($token);
            $result = true;
        } catch (Exception $e) {
            // Invalid token
        }
        return $result;
    }
}

在程式碼中,我們使用FirebaseJWTJWT庫中的encode ()decode()方法來建立和解析JWT。 $key是我們用來簽署 JWT 的金鑰,$alg是我們選擇的演算法。在createToken()方法中,我們使用 JWT 負(fù)載中的四個(gè)鍵(iss,iat,exp和sub)並添加自訂data。 $expiration參數(shù)指定 JWT 的過期時(shí)間。因此,JWT 只能在有效期限內(nèi)使用。

步驟3:在中間件中驗(yàn)證令牌

現(xiàn)在我們已經(jīng)建立了 Token 類別以處理 JWT 相關(guān)的工作,我們需要在中間件中驗(yàn)證使用者 JWT。使用中間件可以方便地在應(yīng)用程式的控制器程式碼中攔截和設(shè)定回應(yīng),並且可以將程式碼分離到不同的類別中以便更好地管理和修改。

在app/middleware 目錄下建立Jwt.php文件,並加入以下程式碼:

<?php

namespace appmiddleware;

use appcommonToken;
use thinkexceptionHttpResponseException;
use thinkResponse;

class Jwt
{
    public function handle($request, Closure $next)
    {
        if (!$request->header('Authorization')) {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }

        $header = $request->header('Authorization');
        $token = substr($header, 7);
        if (Token::verifyToken($token)) {
            $request->data = Token::getDataByToken($token);
            return $next($request);
        } else {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }
    }
}

在此中間件中,我們使用Token 類別中的verifyToken()方法來驗(yàn)證JWT。此方法將傳回 true 或 false,表示令牌是否有效。如果有效,我們將使用getDataByToken()方法來取得 JWT 的資料部分並將其儲存在$request->data中。這樣,控制器就可以使用此數(shù)據(jù)。

步驟4:設(shè)定路由

現(xiàn)在,我們已經(jīng)建立了中間件,我們需要將其套用到適當(dāng)?shù)穆酚伞?

假設(shè)我們要保護(hù)/api/user的路由,我們需要在route pi.php檔案中如下設(shè)定路由:

use appmiddlewareJwt;

Route::group('api', function() {
  Route::get('user', 'UserController@getUserInfo')->middleware(Jwt::class);
});

請注意,在此路由中,我們將Jwt中間件作為參數(shù)傳遞給middleware()方法。這是UserController中的getUserInfo()方法的範(fàn)例程式碼。

<?php

namespace appcontroller;

use appcommonToken;

class UserController
{
    public function getUserInfo()
    {
        $data = request()->data;
        ...
    }
    ...
}

在控制器中,您可以透過呼叫$request->data來存取經(jīng)過驗(yàn)證的 JWT 中儲存的資料。

結(jié)論

JWT 驗(yàn)證方法可以讓您的 Web 應(yīng)用程式更安全可靠。在本文中,我們介紹如何在ThinkPHP6中使用 Firebase JWT PHP 函式庫來建立和驗(yàn)證 JWT。

我們創(chuàng)建了一個(gè)名為 Token 的類,該類用於處理 JWT 相關(guān)的工作,並且添加了一個(gè)用於驗(yàn)證 JWT 並設(shè)定資料的中間件。最後,我們設(shè)定了使用此中間件的路由和控制器程式碼以存取儲存在 JWT 中的資料。

引入 JWT 身份驗(yàn)證的主要目的是確保應(yīng)用程式中的資源只能被經(jīng)過身份驗(yàn)證的使用者使用。希望本文能幫助您了解如何使用 JWT 身份驗(yàn)證來保護(hù)您的應(yīng)用程式!

以上是在ThinkPHP6中使用JWT驗(yàn)證的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設(shè)置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項(xiàng)目根目錄下的.vscode/settings

Python Parse Date String示例 Python Parse Date String示例 Jul 30, 2025 am 03:32 AM

使用datetime.strptime()可將日期字符串轉(zhuǎn)換為datetime對象,1.基本用法:通過"%Y-%m-%d"解析"2023-10-05"為datetime對象;2.支持多種格式如"%m/%d/%Y"解析美式日期、"%d/%m/%Y"解析英式日期、"%b%d,%Y%I:%M%p"解析帶AM/PM的時(shí)間;3.可用dateutil.parser.parse()自動推斷未知格式;4.使用.d

CSS下拉菜單示例 CSS下拉菜單示例 Jul 30, 2025 am 05:36 AM

是的,一個(gè)常見的CSS下拉菜單可以通過純HTML和CSS實(shí)現(xiàn),無需JavaScript。 1.使用嵌套的ul和li構(gòu)建菜單結(jié)構(gòu);2.通過:hover偽類控制下拉內(nèi)容的顯示與隱藏;3.父級li設(shè)置position:relative,子菜單使用position:absolute進(jìn)行定位;4.子菜單默認(rèn)display:none,懸停時(shí)變?yōu)閐isplay:block;5.可通過嵌套實(shí)現(xiàn)多級下拉,結(jié)合transition添加淡入動畫,配合媒體查詢適配移動端,整個(gè)方案簡潔且無需JavaScript支持,適合大

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用於生成從可迭代對像中選取指定數(shù)量元素的所有不重複組合(順序無關(guān)),其用法包括:1.從列表中選2個(gè)元素組合,如('A','B')、('A','C')等,避免重複順序;2.對字符串取3個(gè)字符組合,如"abc"、"abd",適用於子序列生成;3.求兩數(shù)之和等於目標(biāo)值的組合,如1 5=6,簡化雙重循環(huán)邏輯;組合與排列的區(qū)別在於順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

數(shù)據(jù)工程ETL的Python 數(shù)據(jù)工程ETL的Python Aug 02, 2025 am 08:48 AM

Python是實(shí)現(xiàn)ETL流程的高效工具,1.數(shù)據(jù)抽取:通過pandas、sqlalchemy、requests等庫可從數(shù)據(jù)庫、API、文件等來源提取數(shù)據(jù);2.數(shù)據(jù)轉(zhuǎn)換:使用pandas進(jìn)行清洗、類型轉(zhuǎn)換、關(guān)聯(lián)、聚合等操作,確保數(shù)據(jù)質(zhì)量並優(yōu)化性能;3.數(shù)據(jù)加載:利用pandas的to_sql方法或云平臺SDK將數(shù)據(jù)寫入目標(biāo)系統(tǒng),注意寫入方式與批次處理;4.工具推薦:Airflow、Dagster、Prefect用於流程調(diào)度與管理,結(jié)合日誌報(bào)警與虛擬環(huán)境提升穩(wěn)定性與可維護(hù)性。

Python物業(yè)裝飾示例 Python物業(yè)裝飾示例 Jul 30, 2025 am 02:17 AM

@property裝飾器用於將方法轉(zhuǎn)為屬性,實(shí)現(xiàn)屬性的讀取、設(shè)置和刪除控制。 1.基本用法:通過@property定義只讀屬性,如area根據(jù)radius計(jì)算並直接訪問;2.進(jìn)階用法:使用@name.setter和@name.deleter實(shí)現(xiàn)屬性的賦值驗(yàn)證與刪除操作;3.實(shí)際應(yīng)用:在setter中進(jìn)行數(shù)據(jù)驗(yàn)證,如BankAccount確保餘額非負(fù);4.命名規(guī)範(fàn):內(nèi)部變量用_前綴,property方法名與屬性一致,通過property統(tǒng)一訪問控制,提升代碼安全性和可維護(hù)性。

Python Pytest夾具示例 Python Pytest夾具示例 Jul 31, 2025 am 09:35 AM

fixture是用於為測試提供預(yù)設(shè)環(huán)境或數(shù)據(jù)的函數(shù),1.使用@pytest.fixture裝飾器定義fixture;2.在測試函數(shù)中以參數(shù)形式註入fixture;3.yield之前執(zhí)行setup,之後執(zhí)行teardown;4.通過scope參數(shù)控製作用域,如function、module等;5.將共用fixture放在conftest.py中實(shí)現(xiàn)跨文件共享,從而提升測試的可維護(hù)性和復(fù)用性。

Python獲取MAC地址示例 Python獲取MAC地址示例 Jul 30, 2025 am 02:59 AM

使用uuid模塊可跨平臺獲取本機(jī)第一個(gè)網(wǎng)卡的MAC地址,無需第三方庫,通過uuid.getnode()轉(zhuǎn)換為標(biāo)準(zhǔn)格式;2.使用subprocess調(diào)用系統(tǒng)命令如ipconfig或ifconfig,結(jié)合正則提取所有網(wǎng)卡MAC地址,適用於需獲取多個(gè)網(wǎng)卡信息的場景;3.使用第三方庫getmac,安裝後調(diào)用get_mac_address()即可獲取MAC,支持按接口或IP查詢,但需額外依賴;綜上,若無需外部庫則推薦uuid方法,若需靈活獲取多網(wǎng)卡信息可用subprocess方案,允許安裝依賴時(shí)getma

See all articles