PHP開發:使用 Laravel Sanctum 實現 SPA 應用安全認證
Laravel Sanctum 是一個 Laravel 框架官方推薦的輕量級使用者認證庫,它旨在為單頁應用程式(SPA)和行動應用程式提供簡單而現代的身份驗證。本文將介紹如何使用 Laravel Sanctum 實現 SPA 應用的安全認證。
一、安裝Laravel
首先需要安裝Laravel,可以透過composer 安裝最新版本的Laravel:
composer create-project --prefer-dist laravel/laravel your-project-name
二、設定Sanctum
安裝好Laravel 之後需要進行Sanctum 的設定,請先執行以下指令:
composer require laravel/sanctum
在Laravel 5.5 以下版本中,需要在config/app.php 檔案中加入服務提供者和門面:
'providers' => [
... LaravelSanctumSanctumServiceProvider::class,
],
'aliases' => [
... 'Sanctum' => LaravelSanctumSanctum::class,
],
在Laravel 5.5 以上版本中,無需手動新增服務提供者或門面。
接著需要執行資料庫遷移以建立Sanctum 所需的表格:
php artisan migrate
如果您的應用程式需要使用SPA 驗證,則應在config/ cors.php 檔案中新增您的應用程式網域和信任的網域。在下面的範例中,我們假設您正在建立一個具有前端應用程式的後端API:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['http://your-app-url.com'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => false,
'max_age ' => false,
'supports_credentials' => true,
三、建立API 和認證控制器
在resources/views 中建立一個index.blade.php 文件,用於顯示SPA 介面。
在 routes/api.php 中編寫 API 路由。我們在這裡建立一個測試路由,傳回目前認證使用者的使用者資訊:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
接下來,我們需要新增一個特定於SPA 應用程式的控制器,以建立和管理Sanctum 令牌。這個控制器負責建立令牌並為使用者簽發身份驗證 cookie。
首先在app/Http/Controllers 資料夾中建立一個API 控制器,例如AuthController:
php artisan make:controller API/AuthController
#然後在AuthController 中加入register 與login 方法:
public function register(Request $request)
{
$request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|unique:users|max:255', 'password' => 'required|string|min:8|confirmed' ]); $user = new User([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password) ]); $user->save(); return response()->json([ 'message' => 'Successfully registered' ], 201);
}
public function login(Request $request)
{
$request->validate([ 'email' => 'required|string|email', 'password' => 'required|string', 'remember_me' => 'boolean' ]); $credentials = request(['email', 'password']); if (!Auth::attempt($credentials)) { return response()->json([ 'message' => 'Unauthorized' ], 401); } $user = $request->user(); $tokenResult = $user->createToken('Personal Access Token'); $token = $tokenResult->token; if ($request->remember_me) { $token->expires_at = Carbon::now()->addWeeks(1); } $token->save(); return response()->json([ 'access_token' => $tokenResult->accessToken, 'token_type' => 'Bearer', 'expires_at' => Carbon::parse( $tokenResult->token->expires_at )->toDateTimeString() ]);
}
四、處理身份驗證
現在,您已經擁有了創建Token、用戶註冊和用戶登入的所有必要程式碼,下面我們將開始建立身份驗證過程。
SPA 應用程式使用 Sanctum 發送 POST 請求,透過 email 和 password 參數驗證使用者憑證。如果驗證成功,則應用程式將接收到 OAuth Token。
使用 SPA 應用程式時,在 headers 中新增 Authorization: Bearer
完成身份驗證後,您可以透過 Sanctum 使用身份驗證路由取得目前身份驗證使用者的資訊。例如,我們可以使用以下程式碼檢索目前驗證使用者的名稱:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user()->name;
});
五、建立相關頁面和元件
請務必確保您的Laravel 入口點檔案包含必要的JavaScript 程式庫(這裡使用Vue.js、Vue Router 和Axios )。在resources/js/app.js 檔案中,定義Vue 元件:
require('./bootstrap');
import Vue from 'vue';
import App from ' ./views/App';
import router from './router';
import store from './store';
Vue.component('App', App);
const app = new Vue({
el: '#app', router, store
});
#建立資源資料夾views 和views/App.vue,新增必要的元件(登入表單、登錄檔等)。在 views 資料夾中建立需要的所有頁面元件。
這裡為了示範方便,程式碼量略多,請自行查閱 Laravel 官方文件。
六、重構API 路由和AckController
更新API 路由,將SPA 路由對應到AckController,同時確保中介軟體會使用Sanctum 設定:
Route::middleware('auth :sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Route::post('/register', 'APIAuthController@ register');
Route::post('/login', 'APIAuthController@login');
Route::middleware('auth:sanctum')->get('/spa/ {any}', function () {
return view('index');
})->where('any', '.*');
我們在AckController 中加入forgotPassword 和resetPassword 方法,用於處理使用者忘記密碼以及回應密碼重設連結的請求:
public function forgotPassword(Request $request)
{
$request->validate(['email' => 'required|email']); $user = User::where('email', $request->email)->first(); if (!$user) { return response()->json([ 'message' => 'We could not find your account' ], 404); } else { $user->sendPasswordResetNotification($request->email); } return response()->json([ 'message' => 'We have e-mailed your password reset link!' ]);
}
##public function resetPassword( Request $request){
$request->validate([ 'email' => 'required|email', 'token' => 'required|string', 'password' => 'required|string|confirmed|min:8' ]); $resetPasswordStatus = Password::reset($request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) { $user->forceFill([ 'password' => Hash::make($password) ])->save(); }); if ($resetPasswordStatus === Password::INVALID_TOKEN) { return response()->json(['message' => 'The reset token is invalid']); } return response()->json(['message' => 'Your password has been updated']);
七、新增路由
在 Laravel Sanctum 中,需要設定路由以啟用身份驗證、CSRF 保護和錯誤保護,使用 groban/laravel-livewire 實現 SPA 應用的路由。
八、執行SPA 應用程式
完成上述步驟後,我們可以使用下列指令執行SPA 應用程式:
npm run dev
在瀏覽器中開啟運行的設備上的主機IP 位址或URL 來查看SPA 應用程式。
最後,我們已經成功地使用 Laravel Sanctum 實現了SPA應用的安全認證。透過這種方法,可以確保應用程式資料的安全,防止未經授權的存取和保護私有資訊。
以上是PHP開發:使用 Laravel Sanctum 實現 SPA 應用安全認證的詳細內容。更多資訊請關注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)

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

Laravel適合團隊熟悉PHP且需功能豐富的項目,Python框架則視項目需求而定。 1.Laravel提供優雅語法和豐富功能,適合需要快速開發和靈活性的項目。 2.Django適合複雜應用,因其“電池包含”理念。 3.Flask適用於快速原型和小型項目,提供極大靈活性。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

Laravel優化Web開發流程的方法包括:1.使用路由系統管理URL結構;2.利用Blade模板引擎簡化視圖開發;3.通過隊列處理耗時任務;4.使用EloquentORM簡化數據庫操作;5.遵循最佳實踐提高代碼質量和可維護性。

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

最新版本的Laravel10與MySQL5.7及以上、PostgreSQL9.6及以上、SQLite3.8.8及以上、SQLServer2017及以上兼容。這些版本選擇是因為它們支持Laravel的ORM功能,如MySQL5.7的JSON數據類型,提升了查詢和存儲效率。

Laravel和Yii的主要區別在於設計理念、功能特性和使用場景。 1.Laravel注重開發的簡潔和愉悅,提供豐富的功能如EloquentORM和Artisan工具,適合快速開發和初學者。 2.Yii強調性能和效率,適用於高負載應用,提供高效的ActiveRecord和緩存系統,但學習曲線較陡。
