Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan PHP: Gunakan Laravel Sanctum untuk melaksanakan pensijilan keselamatan aplikasi SPA
Laravel Sanctum ialah perpustakaan pengesahan pengguna ringan yang disyorkan secara rasmi oleh rangka kerja Laravel Ia direka untuk menyediakan pengesahan yang ringkas dan moden untuk aplikasi satu halaman (SPA) dan aplikasi mudah alih. Artikel ini akan memperkenalkan cara menggunakan Laravel Sanctum untuk melaksanakan pengesahan keselamatan untuk aplikasi SPA.
1. Pasang Laravel
Mula-mula anda perlu memasang Laravel anda boleh memasang versi terkini Laravel melalui komposer:
projek cipta komposer --prefer-dist laravel/laravel anda. -project-name
2. Konfigurasikan Sanctum
Selepas memasang Laravel, anda perlu mengkonfigurasi Sanctum terlebih dahulu:
komposer memerlukan laravel/sanctum
Di bawah versi Laravel 5.5, anda perlu menambah penyedia perkhidmatan dan fasad dalam fail config/app.php: 'providers' => [... LaravelSanctumSanctumServiceProvider::class,], 'alias' => [
... 'Sanctum' => LaravelSanctumSanctum::class,],Dalam Laravel 5.5 dan ke atas, tidak perlu menambah pembekal perkhidmatan atau fasad secara manual. Anda kemudiannya perlu melakukan pemindahan pangkalan data untuk mencipta jadual yang diperlukan oleh Sanctum: php artisan migrateJika aplikasi anda perlu menggunakan pengesahan SPA, ini harus dalam config/ Tambah domain aplikasi anda dan domain yang dipercayai dalam fail cors.php. Dalam contoh di bawah, kami menganggap anda sedang membina API bahagian belakang dengan aplikasi bahagian hadapan: 'paths' => ['api/*', 'sanctum/csrf-cookie'],'allowed_methods' => ['*'],'allowed_origins' => ['http://your-app-url.com'],'allowed_origins_patterns' = > [],'allowed_headers' => ['*'],'exposed_headers' => 'supports_credentials' => benar,3. Cipta API dan pengawal pengesahan
Buat fail index.blade.php dalam sumber/pandangan , digunakan untuk memaparkan antara muka SPA.
Tulis laluan API dalam route/api.php. Kami mencipta laluan ujian di sini untuk mengembalikan maklumat pengguna pengguna yang sedang disahkan:
return $request->user();});Seterusnya, kita perlu menambah pengawal khusus aplikasi SPA untuk mencipta dan mengurus token Sanctum. Pengawal ini bertanggungjawab untuk mencipta token dan mengeluarkan kuki pengesahan untuk pengguna. Mula-mula buat pengawal API dalam folder app/Http/Controllers, contohnya AuthController: php artisan make:controller API/AuthControllerKemudian tambahkan dalam AuthController Register dan kaedah log masuk: daftar fungsi awam(Minta $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);
}
{
$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() ]);
}
Sekarang anda mempunyai semua kod yang diperlukan untuk membuat token, pendaftaran pengguna dan log masuk pengguna, kami akan mula membina proses pengesahan.
Aplikasi SPA menggunakan Sanctum untuk menghantar permintaan POST untuk mengesahkan kelayakan pengguna melalui parameter e-mel dan kata laluan. Jika pengesahan berjaya, aplikasi menerima Token OAuth.
return $request->user()->name;});5 Cipta halaman dan komponen yang berkaitan
Pastikan anda memastikan fail titik masuk Laravel anda mengandungi perpustakaan JavaScript yang diperlukan (di sini menggunakan Vue.js, Penghala Vue dan Axios ). Dalam fail resources/js/app.js, tentukan komponen Vue:
require('./bootstrap');
import App from ' ./views/App';
import penghala daripada './router';import kedai daripada './store';
Vue.component('App', App);
el: '#app', router, store});Buat paparan dan paparan folder sumber/App.vue, tambah komponen yang diperlukan (borang log masuk, borang pendaftaran, dsb. . Cipta semua komponen halaman yang diperlukan dalam folder pandangan. Untuk kemudahan demonstrasi, jumlah kod di sini lebih besar sedikit. Sila semak dokumentasi rasmi Laravel. 6. Bina semula penghalaan API dan AckController
Kemas kini penghalaan API, petakan penghalaan SPA ke AckController dan pastikan perisian tengah akan menggunakan konfigurasi Sanctum:
Route::middleware('auth : sanctum')->get('/user', function (Minta $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', '.*');Kami menambah kaedah ForgottenPassword dan resetPassword dalam AckController, menggunakan To mengendalikan permintaan apabila pengguna terlupa kata laluan dan membalas pautan tetapan semula kata laluan: fungsi awam terlupaKata Laluan(Permintaan $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!' ]);
}
{
$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']);
}
7. Tambahkan penghalaan
Dalam Laravel Sanctum, penghalaan perlu dikonfigurasikan untuk mendayakan pengesahan, perlindungan CSRF dan perlindungan ralat Gunakan groban/laravel-livewire untuk melaksanakan penghalaan untuk aplikasi SPA.
8. Jalankan aplikasi SPA
Selepas melengkapkan langkah di atas, kita boleh menggunakan arahan berikut untuk menjalankan aplikasi SPA:
npm run dev
Buka dalam pelayar Jalankan alamat IP hos atau URL pada peranti untuk melihat aplikasi SPA.
Akhir sekali, kami telah berjaya menggunakan Laravel Sanctum untuk melaksanakan pengesahan keselamatan untuk aplikasi SPA. Dengan pendekatan ini, data aplikasi boleh dilindungi, menghalang capaian yang tidak dibenarkan dan melindungi maklumat peribadi.
Atas ialah kandungan terperinci Pembangunan PHP: Gunakan Laravel Sanctum untuk melaksanakan pensijilan keselamatan aplikasi SPA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!