Laravel Sanctum實(shí)現(xiàn)Token認(rèn)證,通過(guò)安裝配置、生成Token、前端攜帶Bearer Token請(qǐng)求、路由保護(hù)及注銷刪除Token完成安全驗(yàn)證。
在Laravel中實(shí)現(xiàn)與前端框架(如Vue、React、Angular等)的Token認(rèn)證,通常使用API Token機(jī)制來(lái)保證用戶身份的安全驗(yàn)證。最常見的方式是通過(guò) Laravel Sanctum 或 Passport 來(lái)生成和管理Token。對(duì)于大多數(shù)前后端分離項(xiàng)目,Laravel Sanctum 是更輕量且合適的選擇。
Laravel Sanctum 為SPA(單頁(yè)應(yīng)用)、移動(dòng)端應(yīng)用以及簡(jiǎn)單API提供了簡(jiǎn)潔的API認(rèn)證方案。它通過(guò)為用戶發(fā)放多個(gè)API Token,并對(duì)每個(gè)Token設(shè)置作用范圍(abilities)來(lái)控制權(quán)限。
【安裝與配置】首先,在Laravel項(xiàng)目中安裝 Sanctum:
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
確保 app/Http/Kernel.php
中已注冊(cè) Sanctum 中間件:
立即學(xué)習(xí)“前端免費(fèi)學(xué)習(xí)筆記(深入)”;
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
該中間件會(huì)處理跨域請(qǐng)求中的Cookie狀態(tài),支持無(wú)狀態(tài)Token或基于Cookie的認(rèn)證。
當(dāng)用戶登錄時(shí),后端驗(yàn)證賬號(hào)密碼后,為其創(chuàng)建Token并返回給前端。
【示例登錄接口】use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; public function login(Request $request) { $credentials = $request->only('email', 'password'); if (!Auth::attempt($credentials)) { return response()->json(['message' => 'Invalid credentials'], 401); } $user = Auth::user(); $token = $user->createToken('frontend-token')->plainTextToken; return response()->json([ 'access_token' => $token, 'token_type' => 'Bearer', 'user' => $user ]); }
前端收到 access_token
后,應(yīng)將其存儲(chǔ)在 localStorage 或內(nèi)存中,并在后續(xù)請(qǐng)求中攜帶至服務(wù)端。
前端每次請(qǐng)求API時(shí),需在請(qǐng)求頭中添加Token:
離線運(yùn)行 AI 大模型,構(gòu)建你的私有個(gè)人知識(shí)庫(kù),對(duì)話式提取文件知識(shí),保證個(gè)人文件數(shù)據(jù)安全
Authorization: Bearer <your-access-token>
axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
也可在每次請(qǐng)求時(shí)單獨(dú)設(shè)置:
axios.get('/api/user', { headers: { 'Authorization': 'Bearer ' + token } });
在 routes/api.php
中使用 auth:sanctum
中間件保護(hù)需要認(rèn)證的接口:
use Illuminate\Http\Request; Route::middleware('auth:sanctum')->group(function () { Route::get('/user', function (Request $request) { return $request->user(); }); Route::post('/logout', function (Request $request) { $request->user()->currentAccessToken()->delete(); return ['message' => 'Logged out']; }); });
這樣只有攜帶有效Token的請(qǐng)求才能訪問(wèn)這些接口。
用戶退出登錄時(shí),應(yīng)刪除當(dāng)前使用的Token以增強(qiáng)安全性。
// 刪除當(dāng)前Token $request->user()->currentAccessToken()->delete(); // 或刪除所有Token $request->user()->tokens()->delete();
前端同時(shí)清除本地存儲(chǔ)的Token。
基本上就這些。Laravel Sanctum 提供了足夠簡(jiǎn)單又安全的方式來(lái)實(shí)現(xiàn)前端Token認(rèn)證,適合大多數(shù)前后端分離項(xiàng)目。只要前后端約定好Token傳遞方式,并妥善管理生命周期,就能實(shí)現(xiàn)穩(wěn)定可靠的認(rèn)證機(jī)制。
以上就是laravel如何與前端框架進(jìn)行Token認(rèn)證_Laravel前端Token認(rèn)證實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)