搜尋
首頁php框架Laravel一文介紹Laravel中Token的實作機制

Laravel是一個使用PHP程式語言開發的網路應用框架,它的卓越表現得益於其內部整合大量功能強大的擴充包。其中就包括了Token的底層實作。 Token,即令牌,是Web應用程式常用的一種身份驗證方式,通常用於保護API和Web服務免受非法存取。在這篇文章中,我們將介紹Laravel中Token的實作機制。

一、令牌的概念

Token,顧名思義,就是指一種令牌,是一種標記,可以代表某種身分資訊或授權資訊。它通常由伺服器產生並發放給客戶端,客戶端收到令牌後將其存放在本地,在後續請求時加入請求頭或請求參數中,作為身份驗證或授權的標識。伺服器透過檢查令牌是否有效,就可以確定請求是否具有身份驗證或授權資訊。

令牌的使用能夠更有效地保護網路應用程式免受未經授權的訪問,尤其是在API和Web服務中,令牌是必不可少的。

二、 Laravel Token的實作

Laravel作為一款優秀的Web應用框架,在其內建的Auth功能中提供了Token的支援。在Laravel中,Token的實作使用了Laravel Sanctum這個擴充包。

2.1 Laravel Sanctum

Laravel Sanctum是一款輕量級的身份驗證包,可以為Laravel應用程式提供API身份驗證,基於API秘鑰或Token,讓應用程式更好的運行在無狀態環境中,如SPA應用程式、單頁應用程式和行動應用程式等。 Laravel Sanctum提供了以下功能:

  1. 無需配置即可開始使用;
  2. #支援使用session、Token以及API秘鑰等多種驗證方式;
  3. 內建了多種身份驗證的實現,如cookie、Token、auth等;
  4. 提供了方便的身份驗證和Token生成;
  5. 更好的自訂身份驗證流程。

2.2 Token的實作原理

在Laravel Sanctum中,Token的實作原理與session實作原理類似。在請求中,客戶端向伺服器發出請求時,將Token作為請求參數或Header中的Authorization欄位傳送給伺服器。伺服器在檢查Token是否有效,並在有效期內,給予請求操作的權限或傳回錯誤訊息。 Token的實作流程如下:

  1. 建立Token:當使用者登入時,Sanctum將為該使用者產生一個隨機的Token,並將該Token保存在後台資料庫中;
  2. 傳送Token:將Token作為請求參數或Header中的Authorization欄位傳送給伺服器;
  3. Token驗證:在伺服器端,Sanctum會檢查接收到的Token是否有效,並決定授權或拒絕;
  4. Tokens管理:Sanctum提供了一系列API來建立、撤銷、尋找和驗證Token。

三、 Laravel Token的使用

Sanctum提供了方便易用的API來使用Token,包括Token的建立、撤銷、尋找和驗證等。以下是Token的使用方式:

3.1 安裝Sanctum

在應用程式中,首先需要將Sanctum的依賴套件引入到應用程式的composer.json檔案:

composer require laravel/sanctum

安裝完成後,需要在config/app.php檔案中加入以下設定:

'providers' => [ 
    // Other service providers... 
    Laravel\Sanctum\SanctumServiceProvider::class, 
],

3.2 發布設定

在安裝完成後,需要執行下列指令來發布Sanctum的設定檔:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

3.3 設定Middleware

在使用Sanctum時,需要在對應的路由中新增中間件。在Laravel中,已經內建了API認證的中間件,可以直接呼叫。

3.4 建立Token

在登入後,可以使用以下程式碼來為目前使用者建立Token:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 

// 创建Token 
Route::post('/api/token/create', function (Request $request) { 
    $request->validate([ 
        'email' => 'required|email', 
        'password' => 'required', 
    ]); 

    $user = User::where('email', $request->email)->first(); 

    if (! $user || ! Hash::check($request->password, $user->password)) { 
        throw ValidationException::withMessages([ 
            'email' => ['The provided credentials are incorrect.'], 
        ]); 
    } 

    return $user->createToken($request->header('User-Agent'))->plainTextToken; 
});

在上面的程式碼中,可以看到在建立Token時,使用機器的User-Agent作為額外的參數。這裡的User-Agent是一個HTTP頭,記錄了瀏覽器或應用程式的相關資訊。這個資訊將作為Token的一部分,使得Token一旦被盜用或惡意使用,可以輕鬆發現和撤銷。

3.5 撤銷Token

創建的Token一旦被盜用或失效,可以使用以下程式碼撤銷:

Auth::user()->tokens()->delete();

3.6 驗證擴充功能

#Sanctum也提供了良好的驗證擴展,可以方便地進行存取控制,程式碼如下:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable 
{
    use HasApiTokens, Notifiable;
}

使用上述程式碼之後,我們就可以在User模型中使用can介面來進行存取控制,程式碼如下:

$request->user()->can('update', $post);

在上面的程式碼中,can將根據目前使用者的角色、權限和策略,判斷使用者是否有權進行更新操作。需要注意的是,使用者需要正確實作自己的存取控制邏輯。

四、總結

在本文中,我們介紹了Laravel中Token的底層實作機制,尤其是使用Sanctum擴充包的方式。 Sanctum提供了方便易用的API,能夠快速整合到應用程式中,並提高應用程式的安全性。 Token的使用方式、建立、撤銷與管理,以及存取控制等面向均進行了詳細的解說。

在今天的網路世界中,隨著API和Web服務的廣泛應用,Token作為一種身份驗證方式,將在許多應用程式中得到更加廣泛的應用。 Laravel框架提供了良好的Token實作機制,可以更好地保護Web應用程式免受非法存取。

以上是一文介紹Laravel中Token的實作機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

截至2023年10月,Laravel的最新版本是10.x。 1.Laravel10.x支持PHP8.1,提升了開發效率。 2.Jetstream改進支持Livewire和Inertia.js,簡化前端開發。 3.EloquentORM增加全文搜索功能,提升數據處理性能。 4.使用時需注意依賴包兼容性,並應用緩存優化性能。

Laravel遷移:數據庫管理初學者指南Laravel遷移:數據庫管理初學者指南May 09, 2025 am 12:07 AM

laravelmigrationsStreamLinedAtabasemagementbyByProvidingVersionControlforyourDatabaseschema.1)alloweryoutodefineandsharetherteructureofyourdatabase,MakeiteAsyTomanageChangEsovertime.2)MigrationalageChangangeSovertime.2)MigrationcancancanbecreatcanbecreateNdRununusingsImplecommands,Ensurantertatepeve

Laravel遷移:最佳編碼指南Laravel遷移:最佳編碼指南May 09, 2025 am 12:03 AM

Laravel的遷移系統是開發者進行數據庫設計和管理的強大工具。 1)確保遷移文件命名清晰明了,使用動詞描述操作。 2)考慮數據完整性和性能,如為字段添加唯一約束。 3)使用事務處理確保數據庫一致性。 4)在遷移最後創建索引以優化性能。 5)保持遷移的原子性,每個文件只包含一個邏輯操作。通過這些實踐,可以編寫高效、可維護的遷移代碼。

最新的Laravel版本:與最新功能保持最新最新的Laravel版本:與最新功能保持最新May 09, 2025 am 12:03 AM

Laravel的最新版本是10.x,發佈於2023年初。該版本帶來增強的EloquentORM功能和簡化的路由系統,提升了開發效率和性能,但升級時需謹慎測試以防引入問題。

掌握Laravel軟刪除:最佳實踐和高級技術掌握Laravel軟刪除:最佳實踐和高級技術May 08, 2025 am 12:25 AM

laravelsoftdeletesallow“刪除” withoutremovingRecordSssfromtheDatabase.toimplement:1)usethesoftdeletdeleterationyourmodel.2)usewithtrashed()toincludesoft-deletedrecordsinquordsinquordsinquordsinquordsinquordsinquordsinquordsinquordsinquordsinquordsinquor sinecustomscopemscopemscopeslikeonlikeOnlikeOnlikeOnlikeOnlikeNiqueniendselline)

Laravel軟刪除:恢復和永久刪除記錄Laravel軟刪除:恢復和永久刪除記錄May 08, 2025 am 12:24 AM

在Laravel中,恢復被軟刪除的記錄使用restore()方法,永久刪除使用forceDelete()方法。 1)恢復單個記錄使用withTrashed()->find()->restore(),多個記錄使用onlyTrashed()->restore()。 2)永久刪除單個記錄使用withTrashed()->find()->forceDelete(),多個記錄使用onlyTrashed()->forceDelete()。

當前的Laravel版本:今天下載和升級!當前的Laravel版本:今天下載和升級!May 08, 2025 am 12:22 AM

你應該下載併升級到最新的Laravel版本,因為它提供了增強的EloquentORM功能和新的路由特性,這些更新可以提高應用程序的效率和安全性。要升級,請按照以下步驟:1.備份當前應用程序,2.更新composer.json文件至最新版本,3.運行更新命令。雖然可能會遇到一些常見問題,如廢棄函數和包兼容性,但通過參考文檔和社區支持,這些問題都可以解決。

Laravel:我什麼時候應該更新到最後一個版本?Laravel:我什麼時候應該更新到最後一個版本?May 08, 2025 am 12:18 AM

youshouldupdateTotheLateStlaraverversionwhentheBeneFitsClearlyOutweighTheCosts.1)newfeaturesandimprovementCanenHanceCarenHanceYourApplication.2)SecurityUpdatesArecrucialifvulnerabilitysareaddresse.3)

See all articles

熱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

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

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

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