Laravel開發:如何使用Laravel Sanctum為SPA提供API驗證?
Laravel開發:如何使用Laravel Sanctum為SPA提供API驗證?
隨著單頁應用程式(SPA)的流行,我們需要一種可靠的方法來保護我們的API免受未經授權的存取和攻擊。 Laravel Sanctum是Laravel提供的一個輕量級的認證系統,它為SPA提供輕鬆的身份驗證。本文將向您展示如何使用Laravel Sanctum為SPA提供API驗證。
使用Laravel Sanctum
Laravel Sanctum是Laravel 7.x版本中的官方包,用於API驗證。 Laravel Sanctum使用該API的Token來識別使用者身份,並且可以透過使用token輕鬆執行多個身份驗證的建置。
安裝Laravel Sanctum
首先,需確保已安裝Laravel框架。
要安裝laravel sanctum,可以使用下列指令
composer require laravel/sanctum
將ServiceProvider加入config/app.php檔案的providers清單。
'providers' => [ // ... LaravelSanctumSanctumServiceProvider::class, ],
現在,可以執行以下命令發布必要的資料庫遷移和Sanctum配置。
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
執行以下命令以執行遷移:
php artisan migrate
使用Sanctum進行預設驗證
Sanctum包含API和單頁應用程式驗證的預設實作。可以透過為使用者模型使用SanctumTraitsHasApiTokens trait來啟用預設身份驗證。
將HasApiTokens trait加入到使用者模型
<?php namespace AppModels; use IlluminateFoundationAuthUser as Authenticatable; use IlluminateNotificationsNotifiable; use LaravelSanctumHasApiTokens; class User extends Authenticatable { use Notifiable, HasApiTokens; // ... }
為了更好的解釋,我們將使用一個簡單的SPA範例。假設範例的URL為http://spa.test和透過http://api.spa.test公開的API。
在Laravel中設定CORS
將下面的程式碼加入app/Providers/AppServiceProvider.php檔案中來允許跨網域資源共用(CORS)。
... use IlluminateSupportFacadesSchema; use IlluminateSupportFacadesURL; class AppServiceProvider extends ServiceProvider { public function boot() { Schema::defaultStringLength(191); if (config('app.env') === 'production') { URL::forceScheme('https'); } $headers = [ 'Access-Control-Allow-Origin' => '*', 'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE', 'Access-Control-Allow-Headers' => 'Origin, Content-Type, Accept, Authorization, X-Request-With', 'Access-Control-Allow-Credentials' => 'true', ]; $this->app['router']->middleware('api')->get('/sanctum/csrf-cookie', function () { return response()->json(['status' => 'success']); }); foreach ($headers as $key => $value) { config(['cors.supportsCredentials' => true]); config(['cors.paths.api/*' => [ 'allowedOrigins' => ['http://spa.test'], 'allowedHeaders' => [$key], 'allowedMethods' => ['*'], 'exposedHeaders' => [], 'maxAge' => 86400, ]]); } } }
將上述程式碼中的http://spa.test替換為您的SPA的URL。
令牌驗證和API保護說明
在控制器中,我們可以使用Sanctum的auth中間件來保護路由
public function index(Request $request) { $user = $request->user(); // ... } public function store(Request $request) { $user = $request->user(); // ... } public function destroy(Request $request, string $id) { $user = $request->user(); // ... } public function update(Request $request, string $id) { $user = $request->user(); // ... }
這會從請求標頭中獲取Sanctum授權令牌,並使用該令牌驗證使用者。如果未在標頭中提供授權令牌,則將傳回401未經授權的錯誤。
發出授權令牌請求
在我們的SPA中,我們可以使用axios函式庫來使用API並取得令牌。要取得授權令牌,我們需要先取得CSRF令牌,所以我們需要傳送一個GET請求來取得它。
axios.get('http://api.spa.test/sanctum/csrf-cookie').then(response => { axios.post('http://api.spa.test/login', { username: this.username, password: this.password }).then(response => { axios.defaults.headers.common['Authorization'] = `Bearer ${response.data.token}`; this.$router.push({ name: 'home' }); }); });
上面的程式碼將在http://api.spa.test中發出POST請求,在伺服器上建立一個新的Sanctum授權令牌,並將令牌作為response.data.token進行回應。此後,我們可以將令牌新增至axios的通用頭檔中,以在SPA中使用所有後續請求。
注意,此範例假設有一個名為「login」的路由。
Sanctum也為我們提供了一個logout路由來撤銷授權令牌。
axios.post('http://api.spa.test/logout').then(response => { delete axios.defaults.headers.common['Authorization']; this.$router.push({ name: 'login' }); });
結論
Laravel Sanctum是一個輕量級的簡單實用的身份驗證系統,它易於整合和使用,並提供預設的身份驗證功能,是SPA身份驗證的絕佳解決方案。一旦您與Sanctum一起使用,您將不再需要編寫自己的身份驗證系統。它能夠讓我們為我們的API快速實現安全的身份驗證,並讓我們的SPA與API在很短的時間內互動。
以上是Laravel開發:如何使用Laravel Sanctum為SPA提供API驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

在dcatadmin(laravel-admin)中如何實現自定義點擊添加數據的表格功能在使用dcat...

Laravel郵件發送失敗時的退信代碼獲取方法在使用Laravel開發應用時,經常會遇到需要發送驗證碼的情況。而在實�...

Laravel框架中Redis連接的共享與select方法的影響在使用Laravel框架和Redis時,開發者可能會遇到一個問題:通過配置...

在Laravel多租戶擴展包stancl/tenancy中自定義租戶數據庫連接使用Laravel多租戶擴展包stancl/tenancy構建多租戶應用時,...

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

在Laravel6項目中如何檢查Redis連接的有效性是一個常見的問題,特別是在項目依賴於Redis進行業務處理時。以下是...

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Laravel數據庫遷移過程中出現類重複定義問題在使用Laravel框架進行數據庫遷移時,開發者可能會遇到“類已使用�...
