


Menguasai Pengesahan Selamat dalam Node.js: Log Masuk/Keluar dengan bcrypt.js dan JWT
Bayangkan anda sedang membina aplikasi web yang akan dilancarkan. Anda telah mereka bentuk antara muka pengguna dengan teliti, menambah ciri menarik dan memastikan semuanya berjalan lancar. Tetapi apabila tarikh pelancaran semakin hampir, kebimbangan yang mengganggu mula membimbangkan anda—keselamatan. Khususnya, bagaimana untuk memastikan bahawa hanya pengguna yang betul boleh mengakses bahagian aplikasi anda yang betul. Di sinilah pengesahan masuk.
Pengesahan ialah proses mengesahkan siapa pengguna dan ia merupakan aspek kritikal pembangunan web. Dalam landskap digital yang luas, memastikan pengguna boleh log masuk dan log keluar dengan selamat daripada aplikasi anda adalah yang paling penting. Satu slip, dan apl anda mungkin terdedah kepada serangan, meletakkan data pengguna pada risiko.
pengenalan
Dalam artikel ini, kami akan meneroka pengesahan selamat dalam Node.js, menggunakan bcrypt.js untuk mencincang kata laluan dan token JWT untuk mengurus sesi pengguna. Pada akhirnya, anda akan mempunyai pemahaman yang kukuh tentang cara melaksanakan sistem log masuk/log keluar yang kukuh, memastikan data pengguna anda selamat dan terjamin.
Jadi, mari kita mulakan perjalanan ini untuk membina sistem pengesahan kalis peluru, bermula daripada menyediakan persekitaran kita kepada memastikan laluan kita dengan JWT. Bersedia untuk mengunci apl Node.js anda? Mari mulakan.
Menyediakan Persekitaran Projek Node.js Anda
Mula-mula, mulakan projek Node.js anda dengan npm init -y, yang mencipta fail package.json dengan tetapan lalai. Seterusnya, pasang pakej penting: ekspres untuk menyediakan pelayan, mongoose untuk mengurus MongoDB, jsonwebtoken untuk mengendalikan token JWT, bcryptjs untuk mencincang kata laluan, dotenv untuk pembolehubah persekitaran, cors untuk mendayakan Perkongsian Sumber Silang Asal, penghurai kuki untuk menghuraikan kuki. Akhir sekali, tambahkan nodemon sebagai kebergantungan pembangunan untuk memulakan semula pelayan secara automatik apabila kod berubah.
1.`npm init -y` 2.`npm install express mongoose jsonwebtoken bcryptjs dotenv cors cookie-parser` 3.`npm install nodemon -D`
Sekarang ubah suai fail package.json. Tambahkan skrip seperti kod dan taip saya.
"scripts": { "dev": "nodemon backend/index.js", "start": "node backend/index.js" }, "type": "module",
Persediaan Pelayan Asas
Seterusnya, kami akan menyediakan pelayan Express asas. Buat fail bernama index.js . Kod ini memulakan Express dan mencipta contoh aplikasi. Kami kemudiannya akan menentukan laluan untuk URL akar ("/") untuk mengendalikan permintaan HTTP GET yang masuk. Selepas itu, kami akan memulakan pelayan pada port 8000, membenarkannya mendengar permintaan masuk.
import express from "express"; const app = express(); app.get("/", (req, res) => { res.send("Server is ready"); }); app.listen(8000, () => { console.log("Server is running on PORT 8000"); });
Menyediakan Laluan Pengesahan Asas
Sekarang, kami akan mencipta folder bernama 'laluan' dan dalam folder itu kami akan membuat fail baharu bernama authRoute.js dan tampal kod di bawah untuk melihat asas laluan.
Dalam coretan kod ini, kami menyediakan laluan untuk titik akhir pengesahan yang berbeza menggunakan Express. Mula-mula, kami mengimport perpustakaan ekspres dan mencipta contoh penghala baharu. Kemudian, kami mentakrifkan tiga laluan GET: /signup, /login, dan /logout, masing-masing bertindak balas dengan objek JSON yang menunjukkan bahawa titik akhir masing-masing telah dipukul. Akhir sekali, kami mengeksport tika penghala sebagai eksport lalai, menjadikannya tersedia untuk digunakan di bahagian lain aplikasi.
1.`npm init -y` 2.`npm install express mongoose jsonwebtoken bcryptjs dotenv cors cookie-parser` 3.`npm install nodemon -D`
Sekarang tukar index.js menambahkan laluan pengesahan untuk menguji titik akhir anda.
"scripts": { "dev": "nodemon backend/index.js", "start": "node backend/index.js" }, "type": "module",
Kini, anda boleh mengujinya dalam pelayar anda...tetapi saya akan menggunakan Posmen untuk kemudahannya. Anda boleh menguji semua titik akhir seperti ini.
Begitu juga anda boleh melihat laluan lain seperti Log Keluar dan Daftar.
Jadi, apl asas kami sudah sedia...kini jadikan ia sebagai sistem pengesahan yang mantap dan betul.
Mencipta Model Pengguna dengan Skema Mongoose
Sekarang, sediakan pangkalan data mongoDB kami dahulu. Untuk berbuat demikian, buat folder Model dan di bawahnya fail User.js dan dalam fail ini tambahkan skema dan model Mongoose untuk Pengguna dalam pangkalan data mongoDB. Skema termasuk medan untuk nama pengguna, Nama penuh, kata laluan dan e-mel, masing-masing dengan jenis data dan kekangan tertentu seperti keunikan dan status yang diperlukan. Medan kata laluan juga mempunyai panjang minimum 6 aksara.
import express from "express"; const app = express(); app.get("/", (req, res) => { res.send("Server is ready"); }); app.listen(8000, () => { console.log("Server is running on PORT 8000"); });
Menyambung ke MongoDB dengan Mongoose
Sekarang mari sambung ke pangkalan data kami. Kami akan mencipta folder bernama db dan di dalamnya, fail yang dipanggil connectDB.js. Dalam fail ini, kami akan mentakrifkan fungsi tak segerak connectMongoDB yang cuba menyambung ke pangkalan data MongoDB menggunakan Mongoose. Ia mendapat rentetan sambungan pangkalan data daripada pembolehubah persekitaran MONGO_URI. Jika sambungan berjaya, ia log mesej kejayaan dengan nama hos. Jika gagal, ia mencatat ralat dan keluar dari proses dengan kod status 1. Fungsi ini dieksport untuk digunakan di bahagian lain aplikasi.
import express from "express"; // Create a new Express router instance const router = express.Router(); // Define a GET route for the signup endpoint router.get("/signup", (req, res) => { // Return a JSON response indicating that the signup endpoint was hit res.json({ data: "You hit signup endpoint", }); }); // Define a GET route for the login endpoint router.get("/login", (req, res) => { // Return a JSON response indicating that the login endpoint was hit res.json({ data: "You hit login endpoint", }); }); // Define a GET route for the logout endpoint router.get("/logout", (req, res) => { // Return a JSON response indicating that the logout endpoint was hit res.json({ data: "You hit logout endpoint", }); }); // Export the router instance as the default export export default router;
Sekarang untuk menggunakan MONGO_URI kita perlu membuatnya dalam fail .env. Di sini saya telah menggunakan rentetan sambungan persediaan mongoDB tempatan. Jika anda mahu, anda juga boleh menggunakan atlas mongoDB.
import express from "express"; import authRoute from "./routes/authRoutes.js"; const app = express(); app.get("/", (req, res) => { res.send("Server is ready"); }); app.use("/api/auth", authRoute); app.listen(8000, () => { console.log("Server is running on PORT 8000"); });
Fungsi pendaftaran
Sekarang buat fungsi pendaftaran. Untuk pertama kali ini buat pengawal folder dan di sana fail authController.js
import mongoose from "mongoose"; // Define the User schema with various fields and their data types const userSchema = new mongoose.Schema( { // The unique username of the user username: { type: String, required: true, unique: true, }, fullName: { type: String, required: true, }, // The password of the user (min length: 6) password: { type: String, required: true, minLength: 6, }, // The email of the user (unique) email: { type: String, required: true, unique: true, }, }, { timestamps: true } ); // Create the User model based on the userSchema const User = mongoose.model("User", userSchema); // Export the User model export default User;
Pertama, ia mengekstrak Nama penuh, nama pengguna, e-mel dan kata laluan daripada badan permintaan. Ia mengesahkan format e-mel menggunakan ungkapan biasa, mengembalikan status 400 jika format tidak sah.
Seterusnya, fungsi menyemak sama ada nama pengguna atau e-mel sudah wujud dalam pangkalan data. Jika salah satu diambil, status 400 dengan mesej ralat dikembalikan. Ia juga memastikan kata laluan sekurang-kurangnya 6 aksara, menghantar 400 status lagi jika syarat ini tidak dipenuhi.
Kata laluan kemudiannya dicincang dengan selamat menggunakan bcrypt. Contoh Pengguna baharu dibuat dengan data yang disediakan dan disimpan ke pangkalan data.
Selepas menyimpan, fungsi menjana token JWT, menetapkannya sebagai kuki dan mengembalikan status 201 dengan ID pengguna, nama penuh, nama pengguna dan e-mel. Jika sebarang ralat berlaku, ia dilog dan status 500 dihantar dengan mesej "Ralat Pelayan Dalaman".
Untuk menjadikan fungsi ini aktif, anda perlu mengimportnya
1.`npm init -y` 2.`npm install express mongoose jsonwebtoken bcryptjs dotenv cors cookie-parser` 3.`npm install nodemon -D`
Perhatikan sesuatu? perkara baharu yang dipanggil generateTokenAndSetCookie...mari lihat kodnya...buat folder utils dan di sana generateTokenAndSetCookie.js.
"scripts": { "dev": "nodemon backend/index.js", "start": "node backend/index.js" }, "type": "module",
Fungsi **generateTokenAndSetCookie **mencipta JWT dan menyimpannya dalam kuki untuk pengesahan pengguna.
Generasi JWT:
Fungsi menggunakan perpustakaan jsonwebtoken untuk mencipta JWT. Ia menandatangani token dengan ID pengguna dan kunci rahsia (JWT_SECRET daripada pembolehubah persekitaran), menetapkannya untuk tamat tempoh dalam masa 15 hari.
Menetapkan Kuki:
Token kemudiannya disimpan dalam kuki pada penyemak imbas pengguna. Kuki dikonfigurasikan dengan beberapa atribut keselamatan:
- maxAge: Tetapkan jangka hayat kuki kepada 15 hari.
- httpSahaja: Memastikan kuki tidak boleh diakses melalui JavaScript, melindungi daripada serangan XSS (Cross-Site Scripting).
- sameSite: "strict": Menghalang serangan CSRF (Cross-Site Request Forgery) dengan mengehadkan kuki untuk dihantar hanya dengan permintaan dari tapak yang sama.
- selamat: Memastikan kuki hanya dihantar melalui HTTPS jika persekitaran tidak dibangunkan, menambah lapisan keselamatan tambahan.
Jadi fungsi ini memastikan sesi pengguna adalah selamat dan berterusan, menjadikannya bahagian penting dalam proses pengesahan.
Di sini kita perlu menambah satu lagi pembolehubah persekitaran JWT_SECRET dalam .env. Anda boleh menambah sebarang jenis campuran nombor dan rentetan seperti ini.
import express from "express"; const app = express(); app.get("/", (req, res) => { res.send("Server is ready"); }); app.listen(8000, () => { console.log("Server is running on PORT 8000"); });
Sekarang fungsi signUp kami telah selesai..jadi buat laluannya sekarang.
import express from "express"; // Create a new Express router instance const router = express.Router(); // Define a GET route for the signup endpoint router.get("/signup", (req, res) => { // Return a JSON response indicating that the signup endpoint was hit res.json({ data: "You hit signup endpoint", }); }); // Define a GET route for the login endpoint router.get("/login", (req, res) => { // Return a JSON response indicating that the login endpoint was hit res.json({ data: "You hit login endpoint", }); }); // Define a GET route for the logout endpoint router.get("/logout", (req, res) => { // Return a JSON response indicating that the logout endpoint was hit res.json({ data: "You hit logout endpoint", }); }); // Export the router instance as the default export export default router;
ok, sekarang mari ubah suai index.js kami Di sini kami menambah beberapa import baharu. dotenv: Memuatkan pembolehubah persekitaran dengan selamat daripada .env; express.json(): Menghuraikan permintaan JSON yang masuk; express.urlencoded({ extended: true }): Menghuraikan data yang dikodkan URL; cookieParser: Mengendalikan kuki untuk token JWT; connectMongoDB(): Menyambung ke MongoDB untuk penyimpanan data; Laluan: /api/auth menguruskan pendaftaran, log masuk dan log keluar.
Berikut ialah kod index.js yang dikemas kini
1.`npm init -y` 2.`npm install express mongoose jsonwebtoken bcryptjs dotenv cors cookie-parser` 3.`npm install nodemon -D`
Jadi. kini tiba masanya untuk menguji fungsi pendaftaran kami dalam Posmen. Mari lihat sama ada ia berfungsi atau tidak.
Jadi, inilah hasilnya.
Di sini anda boleh melihat ia berfungsi dengan betul dan anda boleh menyemaknya juga pangkalan data mongoDB anda.
Fungsi log masuk
Sekarang buat fungsi log masuk. Mari pergi lagi ke fail authController.js kami
"scripts": { "dev": "nodemon backend/index.js", "start": "node backend/index.js" }, "type": "module",
Pengawal log masuk mengesahkan pengguna dengan mengesahkan nama pengguna dan kata laluan mereka. Ia mula-mula mencari pengguna dalam pangkalan data menggunakan nama pengguna. Jika ditemui, ia membandingkan kata laluan yang disediakan dengan kata laluan cincang yang disimpan dalam pangkalan data menggunakan bcrypt. Jika nama pengguna atau kata laluan tidak betul, ia mengembalikan respons ralat. Apabila pengesahan berjaya, ia menjana token JWT, menetapkannya sebagai kuki menggunakan generateTokenAndSetCookie dan membalas dengan mesej kejayaan, menunjukkan pengguna berjaya log masuk.
Mari tambahkan laluan log masuk kami dalam authRoutes.js
import express from "express"; const app = express(); app.get("/", (req, res) => { res.send("Server is ready"); }); app.listen(8000, () => { console.log("Server is running on PORT 8000"); });
Jom uji dalam Posmen.
Di sini anda boleh melihat ia berjaya menunjukkan Log masuk.
Fungsi log keluar
Baiklah. Sekarang fungsi terakhir iaitu fungsi log keluar. Mari kita laksanakan ini. Ia agak mudah.
import express from "express"; // Create a new Express router instance const router = express.Router(); // Define a GET route for the signup endpoint router.get("/signup", (req, res) => { // Return a JSON response indicating that the signup endpoint was hit res.json({ data: "You hit signup endpoint", }); }); // Define a GET route for the login endpoint router.get("/login", (req, res) => { // Return a JSON response indicating that the login endpoint was hit res.json({ data: "You hit login endpoint", }); }); // Define a GET route for the logout endpoint router.get("/logout", (req, res) => { // Return a JSON response indicating that the logout endpoint was hit res.json({ data: "You hit logout endpoint", }); }); // Export the router instance as the default export export default router;
Pengawal log keluar dengan selamat melog keluar pengguna dengan mengosongkan kuki JWT daripada penyemak imbas pelanggan menggunakan res.cookie, menetapkan nilainya kepada rentetan kosong dan maxAgenya kepada 0, memastikan tamat tempoh serta-merta. Setelah pembersihan kuki berjaya, ia menghantar respons kejayaan dengan mesej yang menunjukkan pengguna berjaya log keluar. Jika sebarang ralat berlaku semasa proses ini, ia menangkap ralat itu, mencatatnya dan mengembalikan respons Ralat Pelayan Dalaman.
Tambahkan laluan ini pada authRoute.js
kami
import express from "express"; import authRoute from "./routes/authRoutes.js"; const app = express(); app.get("/", (req, res) => { res.send("Server is ready"); }); app.use("/api/auth", authRoute); app.listen(8000, () => { console.log("Server is running on PORT 8000"); });
okay. Mari uji ciri terakhir kami, jika ia berfungsi dengan baik atau tidak.
Oh!…Ia berfungsi dengan sangat baik. ??
Jadi, kini bahagian belakang lengkap kami bagi pengesahan ini sudah sedia. ??
Pakej npm saya
Jika anda tidak mahu mengodkan semuanya sendiri dan mahukan penyelesaian pantas, saya telah mencipta pakej npm yang dipanggil auth0_package. Anda boleh mendapatkannya dari sini.
Repositori Github
Anda boleh mendapatkan semua kod saya di atas di sini dalam repo github ini di sini.
Kini permohonan bahagian belakang anda telah selesai. Dalam blog seterusnya, saya akan menerangkan cara mengintegrasikan ini dengan bahagian hadapan anda. Jadi nantikan untuk itu ??.
Kesimpulan
Kesimpulannya, melaksanakan pengesahan selamat dalam aplikasi Node.js adalah penting untuk melindungi data pengguna dan memastikan bahawa hanya pengguna yang diberi kuasa boleh mengakses bahagian tertentu aplikasi anda. Dengan menggunakan bcrypt.js untuk pencincangan kata laluan dan token JWT untuk pengurusan sesi, anda boleh mencipta sistem log masuk/log keluar yang teguh. Pendekatan ini bukan sahaja meningkatkan keselamatan tetapi juga menyediakan pengalaman pengguna yang lancar. Menyediakan pangkalan data MongoDB dan menggunakan Express untuk penghalaan mengukuhkan lagi infrastruktur bahagian belakang. Dengan alatan dan teknik ini, anda boleh melancarkan aplikasi web anda dengan yakin, kerana mengetahui bahawa ia dilindungi dengan baik daripada akses tanpa kebenaran dan potensi ancaman keselamatan.
Atas ialah kandungan terperinci Menguasai Pengesahan Selamat dalam Node.js: Log Masuk/Keluar dengan bcrypt.js dan JWT. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma