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
Lepaskan: 2023-06-14 11:38:01
asal
1563 orang telah melayarinya

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,
Salin selepas log masuk

],

'alias' => [

...
'Sanctum' => LaravelSanctumSanctum::class,
Salin selepas log masuk

],

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();
Salin selepas log masuk
Salin selepas log masuk

});

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);
Salin selepas log masuk

}

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()
]);
Salin selepas log masuk

}

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 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;
Salin selepas log masuk

});

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
Salin selepas log masuk

});

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();
Salin selepas log masuk
Salin selepas log masuk

});

Route::post('/register', 'APIAuthController@ register ');

Route::post('/login', 'APIAuthController@login');

Route::middleware('auth:sanctum')->get('/spa/ { any}', function () {

return view('index');
Salin selepas log masuk

})->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!'
]);
Salin selepas log masuk

}

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']);
Salin selepas log masuk

}

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan