Ikhtisar Kandungan
Artikel ini mengembangkan tutorial sebelumnya yang meliputi penciptaan API CRUD asas dengan Express.js, memfokuskan pada aspek keselamatan yang penting: pengesahan, pengesahan dan kebenaran. Kami akan membina contoh sebelumnya, jadi kebiasaan dengan bahan itu disyorkan. Projek lengkap tersedia di GitHub (pautan disediakan di bawah).
Konsep Utama
Pengesahan: Memastikan data yang disediakan pengguna mematuhi peraturan dan piawaian yang telah ditetapkan. Ini penting untuk keselamatan, menghalang kelemahan seperti suntikan SQL. Beberapa sumber menyerlahkan kepentingan pengesahan yang mantap (pautan disediakan di bawah).
Pengesahan: Mengesahkan identiti pengguna. Ini biasanya melibatkan menyemak bukti kelayakan (cth., nama pengguna/e-mel dan kata laluan) terhadap rekod yang disimpan.
Keizinan: Menentukan tindakan yang dibenarkan dilakukan oleh pengguna. Ini mengawal akses kepada sumber berdasarkan peranan dan kebenaran pengguna.
Melaksanakan Pengesahan
Kami akan mencipta fungsi pengesahan untuk medan name
, amount
dan date
:
name
: Rentetan, bukan kosong, 10-255 aksara.amount
: Nombor atau rentetan angka, positif, bukan kosong.date
: Rentetan, pilihan (lalai kepada tarikh semasa jika ditinggalkan), format YYYY-MM-DD.Fungsi ini (terletak di validations.js
) menggunakan semakan jenis dan pengesahan format asas. Pengesahan yang lebih komprehensif (cth., semakan julat tarikh) boleh ditambah.
<code class="language-javascript">// validations.js (excerpt) const isString = (arg) => typeof arg === "string"; const isNumber = (arg) => !isNaN(Number(arg)); function isValidName(name) { /* ... */ } function isValidAmount(amount) { /* ... */ } function isValidDate(date) { /* ... */ } module.exports = { isValidName, isValidAmount, isValidDate };</code>
Menambahkan Pengesahan dan Keizinan
Untuk demonstrasi, kami akan menggunakan storan data dalam memori (susunan objek) untuk pengguna dan perbelanjaan. Ini tidak sesuai untuk pengeluaran.
Fail data.js
menyimpan data pengguna dan perbelanjaan:
<code class="language-javascript">// data.js (excerpt) let users = [ { id: "...", email: "...", password: "..." }, //Example User // ...more users ]; let expenditures = [ { id: "...", userId: "...", name: "...", amount: ..., date: "..." }, //Example Expense // ...more expenses ]; module.exports = { expenditures, users };</code>
Titik Tamat Pendaftaran (/users/signup
)
Titik akhir ini mencipta pengguna baharu. Ia mengesahkan e-mel dan kata laluan, menyemak pendua e-mel, menjana UUID dan (untuk demo ini sahaja) menyimpan kata laluan mentah. Token pengesahan berkod base64 (e-mel:UUID) dikembalikan. Pencincangan kata laluan ditinggalkan untuk kesederhanaan tetapi penting dalam persekitaran pengeluaran.
Log Masuk Endpoint (/users/login
)
Titik akhir ini mengesahkan pengguna sedia ada. Ia mengesahkan kelayakan dan mengembalikan token pengesahan berkod base64 jika berjaya.
Titik Akhir Dilindungi
Untuk melindungi titik akhir (cth., /expenditures
), kami akan memerlukan token pengesahan dalam pengepala permintaan (Authorization
pengepala). Token dinyahkod, pengguna disahkan dan hanya data pengguna sendiri dikembalikan.
<code class="language-javascript">// validations.js (excerpt) const isString = (arg) => typeof arg === "string"; const isNumber = (arg) => !isNaN(Number(arg)); function isValidName(name) { /* ... */ } function isValidAmount(amount) { /* ... */ } function isValidDate(date) { /* ... */ } module.exports = { isValidName, isValidAmount, isValidDate };</code>
Kesimpulan
Artikel ini memberikan pengenalan asas kepada pengesahan, pengesahan dan kebenaran dalam API Node.js/Express.js. Ingat bahawa langkah keselamatan yang ditunjukkan di sini dipermudahkan untuk tujuan pendidikan dan seharusnya tidak digunakan dalam sistem pengeluaran. Aplikasi sedia pengeluaran memerlukan pencincangan kata laluan yang mantap, pengurusan token selamat (JWT disyorkan) dan penyepaduan pangkalan data.
Sumber
(Ingat untuk menggantikan ruang letak kurungan dengan pautan sebenar.)
Atas ialah kandungan terperinci Pengesahan, Pengesahan dan Kebenaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!