Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan PHP: Gunakan Laravel Sanctum untuk melaksanakan pensijilan keselamatan aplikasi SPA

Pembangunan PHP: Gunakan Laravel Sanctum untuk melaksanakan pensijilan keselamatan aplikasi SPA

WBOY
WBOYasal
2023-06-14 11:37:091555semak imbas

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 migrate

Jika 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:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {

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/AuthController

Kemudian 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);

}

log masuk fungsi awam (Minta $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()
]);

}

4. Mengendalikan Pengesahan

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.

Apabila menggunakan aplikasi SPA, tambahkan Kebenaran: Pembawa d6fb5a6237ab04b68d3c67881a9080fa dalam pengepala untuk mengakses API yang dilindungi melalui penghalaan aplikasi.

Selepas melengkapkan pengesahan, anda boleh menggunakan laluan pengesahan melalui Sanctum untuk mendapatkan maklumat pengguna yang sedang disahkan. Sebagai contoh, kami boleh mendapatkan semula nama pengguna yang sedang disahkan menggunakan kod berikut:

Route::middleware('auth:sanctum')->get('/user', function (Request $request ) {

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 Vue dari 'vue';

import App from ' ./views/App';

import penghala daripada './router';

import kedai daripada './store';

Vue.component('App', App);

apl const = Vue baharu({

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!'
]);

}

kata laluan semula fungsi awam( Permintaan $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']);

}

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn