在現(xiàn)今網(wǎng)路應(yīng)用大規(guī)模開(kāi)發(fā)中,使用者的安全認(rèn)證是不可或缺的一部分。為了確保使用者的安全,常見(jiàn)的做法是使用JSON Web Token(JWT)進(jìn)行身份驗(yàn)證。它可以輕鬆有效地實(shí)現(xiàn)使用者身份驗(yàn)證和權(quán)限控制。在本文中,我們將介紹如何在ThinkPHP6專(zhuān)案中使用JWT進(jìn)行認(rèn)證。
什麼是JSON Web Token?
JSON Web Token(JWT)是一種輕量級(jí)的身份驗(yàn)證機(jī)制。它的作用是在網(wǎng)路上安全地傳輸聲明,它可以被用作身份驗(yàn)證和聲明交換的一種方式。 JWT包含在HTTP請(qǐng)求標(biāo)頭或URL參數(shù)中,所以很容易便捷地在服務(wù)端和用戶(hù)端之間傳輸。
JWT由三個(gè)部分組成:頭部、負(fù)荷和簽名。頭部包含了描述簽名演算法和類(lèi)型的信息,載荷包含了聲明和數(shù)據(jù)信息,簽名則用於驗(yàn)證JWT的合法性。 JWT的負(fù)載中可以?xún)?chǔ)存任何數(shù)據(jù),你可以自訂需要的資訊。
在ThinkPHP6中使用JWT進(jìn)行認(rèn)證的步驟
步驟一:安裝 jwt-auth 擴(kuò)充功能
首先,我們需要在專(zhuān)案中引入 jwt-auth 擴(kuò)充。在 composer.json 檔案中加入以下依賴(lài):
"tymon/jwt-auth": "^1.0.0-rc.5"
在安裝完依賴(lài)後使用 composer update 更新一下。
步驟二:產(chǎn)生設(shè)定檔
執(zhí)行下面的指令產(chǎn)生設(shè)定檔:
php think jwt:publish
產(chǎn)生設(shè)定檔後,我們需要修改配置,設(shè)定JWT 金鑰和有效期限等參數(shù),修改/config/jwt.php 檔案即可。
步驟三:寫(xiě)認(rèn)證中間件
JWT 的認(rèn)證過(guò)程需要在伺服器端完成。因此,我們需要建立一個(gè)中間件 AuthMiddleware,在請(qǐng)求到達(dá)控制器前,對(duì) JWT 進(jìn)行認(rèn)證。
首先,我們需要建立AuthMiddleware 檔案:
php think make:middleware AuthMiddleware
在A(yíng)uthMiddleware 檔案中,我們可以使用以下程式碼對(duì)JWT 進(jìn)行認(rèn)證:
<?php namespace appmiddleware; use thinkacadeRequest; 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 { //驗(yàn)證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 函數(shù)中,我們首先獲取JWT 的token。如果 token 不存在,就會(huì)拋出 401 個(gè)例外。
如果 token 存在,我們就使用 JWTAuth::authenticate($token) 來(lái)驗(yàn)證token的合法性,成功則將使用者資訊綁定到請(qǐng)求上下文中。
要注意的是,在上述程式碼中,所有拋出例外的情況都會(huì)回傳 401 錯(cuò)誤代碼。
步驟四:使用中介軟體進(jìn)行認(rèn)證
在控制器中使用AuthMiddleware 中介軟體進(jìn)行驗(yàn)證,如下所示:
<?php namespace appcontroller; use appmiddlewareAuthMiddleware; class UserController extends Base { protected $middleware = [ AuthMiddleware::class ]; public function index() { return json($this->request->user, 200); } }
在上述程式碼中,我們向控制器新增了一個(gè)AuthMiddleware 中間件,因此在請(qǐng)求到達(dá)控制器之前將會(huì)自動(dòng)執(zhí)行該中間件。
控制器的 index 方法傳回目前請(qǐng)求使用者的訊息,如果 JWT 認(rèn)證正確,將傳回 json 格式的使用者資訊。
結(jié)論
本文介紹如何在ThinkPHP6專(zhuān)案中使用JWT進(jìn)行認(rèn)證。我們透過(guò)安裝 JWT 擴(kuò)充功能和產(chǎn)生設(shè)定檔、編寫(xiě)認(rèn)證中間件、使用中間件等步驟,詳細(xì)介紹了 JWT 身份驗(yàn)證的實(shí)作過(guò)程。這個(gè)過(guò)程中,我們對(duì)JWT的相關(guān)知識(shí)有了更深入的了解,也為未來(lái)的網(wǎng)路開(kāi)發(fā)提供了有價(jià)值的經(jīng)驗(yàn)。
以上是在ThinkPHP6中使用JWT進(jìn)行認(rèn)證的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

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

AI Clothes Remover
用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io
AI脫衣器

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

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

執(zhí)行 ThinkPHP 專(zhuān)案需要:安裝 Composer;使用 Composer 建立專(zhuān)案;進(jìn)入專(zhuān)案目錄,執(zhí)行 php bin/console serve;造訪(fǎng) http://localhost:8000 查看歡迎頁(yè)面。

ThinkPHP 擁有多個(gè)版本,針對(duì)不同 PHP 版本而設(shè)計(jì)。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復(fù) bug 和提供新功能。目前最新穩(wěn)定版本為 ThinkPHP 6.0.16。在選擇版本時(shí),需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩(wěn)定版本以獲得最佳性能和支援。

ThinkPHP Framework 的本機(jī)運(yùn)作步驟:下載並解壓縮 ThinkPHP Framework 到本機(jī)目錄。建立虛擬主機(jī)(可選),指向 ThinkPHP 根目錄。配置資料庫(kù)連線(xiàn)參數(shù)。啟動(dòng) Web 伺服器。初始化 ThinkPHP 應(yīng)用程式。存取 ThinkPHP 應(yīng)用程式 URL 運(yùn)行。

Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優(yōu)於 Laravel,專(zhuān)注於最佳化和快取。 Laravel 性能良好,但對(duì)於複雜應(yīng)用程序,ThinkPHP 可能更適合。

ThinkPHP 安裝步驟:準(zhǔn)備 PHP、Composer、MySQL 環(huán)境。使用 Composer 建立專(zhuān)案。安裝 ThinkPHP 框架及相依性。配置資料庫(kù)連線(xiàn)。產(chǎn)生應(yīng)用程式碼。啟動(dòng)應(yīng)用程式並造訪(fǎng) http://localhost:8000。

ThinkPHP 是一款高效能的 PHP 框架,具備快取機(jī)制、程式碼最佳化、平行處理和資料庫(kù)最佳化等優(yōu)勢(shì)。官方性能測(cè)試顯示,它每秒可處理超過(guò) 10,000 個(gè)請(qǐng)求,實(shí)際應(yīng)用中被廣泛用於京東商城、攜程網(wǎng)等大型網(wǎng)站和企業(yè)系統(tǒng)。

開(kāi)發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開(kāi)發(fā)隨著網(wǎng)際網(wǎng)路的不斷發(fā)展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應(yīng)用程式之間進(jìn)行通訊的橋樑,它可以實(shí)現(xiàn)資料共享、功能呼叫等操作,為開(kāi)發(fā)者提供了相對(duì)簡(jiǎn)單且快速的開(kāi)發(fā)方式。而ThinkPHP框架作為一款優(yōu)秀的PHP開(kāi)發(fā)框架,具有高效能、可擴(kuò)展且易用

如何使用Hyperf框架進(jìn)行JWT認(rèn)證引言:Hyperf是一款基於Swoole的高效能協(xié)程框架,提供了豐富的功能和靈活的擴(kuò)展性。 JWT(JSONWebToken)是一種用於認(rèn)證和傳輸資訊的開(kāi)放標(biāo)準(zhǔn)。在本文中,我們將介紹如何在Hyperf框架中使用JWT認(rèn)證,並提供具體的程式碼範(fàn)例。一、安裝依賴(lài)套件首先,我們需要安裝hyperf/jwt和lcobucci/jw
