Pengesahan ialah komponen penting dalam aplikasi web moden, membolehkan pembangun memastikan bahawa hanya pengguna yang dibenarkan boleh mengakses ciri atau data tertentu. Dalam aplikasi berasaskan Node.js dan Express, pengesahan biasanya dikendalikan menggunakan token, selalunya Token Web JSON (JWT), kerana kecekapan dan keselamatannya.
Dalam panduan ini, kami akan meneroka cara menyediakan pengesahan pengguna dalam aplikasi Node.js dan Express menggunakan JWT. Pada akhirnya, anda akan mempunyai pemahaman yang kukuh tentang cara melaksanakan pengesahan selamat untuk projek anda sendiri.
Pengesahan ialah proses mengesahkan identiti pengguna atau sistem. Dalam aplikasi web, ia melibatkan menyemak kelayakan pengguna seperti nama pengguna dan kata laluan. Setelah pengesahan berjaya, sistem membenarkan pengguna berinteraksi dengan aplikasi. Untuk keselamatan yang dipertingkatkan, pengesahan berasaskan token seperti JWT biasanya digunakan.
JWT ialah standard industri (RFC 7519) untuk pengesahan berasaskan token yang selamat dan tanpa negara. Mereka membenarkan maklumat dihantar dengan selamat antara pihak sebagai objek JSON. Token sering digunakan untuk mengesahkan identiti pengguna tanpa perlu menyimpan data sesi pada pelayan, menjadikan JWT pilihan yang bagus untuk aplikasi tanpa kewarganegaraan.
Mari kita pecahkan pelaksanaan sistem pengesahan asas menggunakan JWT dalam Node.js dan Express.
Sebelum menyelam ke dalam pengesahan, kami perlu menyediakan aplikasi asas Node.js dan Express. Ikuti langkah ini untuk memulakan projek anda:
mkdir auth-demo cd auth-demo npm init -y npm install express bcryptjs jsonwebtoken mongoose dotenv
Inilah kegunaan setiap pergantungan:
Buat fail .env dalam direktori akar projek anda untuk menyimpan maklumat sensitif seperti URI pangkalan data anda dan kunci rahsia JWT.
MONGODB_URI=mongodb://localhost:27017/auth-demo JWT_SECRET=your_jwt_secret_key
Dalam akar projek, buat fail db.js di dalam folder konfigurasi untuk mengendalikan sambungan MongoDB.
// config/db.js const mongoose = require('mongoose'); const dotenv = require('dotenv'); dotenv.config(); const connectDB = async () => { try { await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true, }); console.log('MongoDB connected'); } catch (err) { console.error('Error connecting to MongoDB:', err.message); process.exit(1); } }; module.exports = connectDB;
Seterusnya, cipta model Pengguna untuk menentukan struktur dokumen pengguna dalam MongoDB. Di dalam folder model, buat User.js:
// models/User.js const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true }, password: { type: String, required: true }, }); module.exports = mongoose.model('User', userSchema);
Kini kami akan menyediakan laluan untuk pendaftaran pengguna. Dalam folder pengawal, buat fail bernama authController.js dan laksanakan logik pendaftaran.
// controllers/authController.js const User = require('../models/User'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); // User registration exports.register = async (req, res) => { const { username, password } = req.body; try { const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(400).json({ message: 'Username already exists' }); } const hashedPassword = await bcrypt.hash(password, 10); const newUser = new User({ username, password: hashedPassword }); await newUser.save(); res.status(201).json({ message: 'User registered successfully' }); } catch (err) { res.status(500).json({ error: err.message }); } };
Logik ini mencincang kata laluan menggunakan bcrypt sebelum menyimpan maklumat pengguna dalam MongoDB.
Log masuk adalah penting untuk menjana dan memulangkan JWT, yang pelanggan akan gunakan untuk mengesahkan permintaan masa hadapan. Begini cara untuk melaksanakan logik log masuk:
// controllers/authController.js (continue) exports.login = async (req, res) => { const { username, password } = req.body; try { const user = await User.findOne({ username }); if (!user) { return res.status(401).json({ message: 'Invalid username or password' }); } const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) { return res.status(401).json({ message: 'Invalid username or password' }); } const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); } catch (err) { res.status(500).json({ error: err.message }); } };
Jika log masuk berjaya, kami menjana JWT menggunakan jsonwebtoken dan menghantarnya kepada pelanggan.
JWT berguna untuk melindungi laluan yang memerlukan pengesahan. Kami akan mencipta perisian tengah untuk mengesahkan token dan memastikan hanya pengguna yang diberi kuasa boleh mengakses titik akhir tertentu.
// middleware/authMiddleware.js const jwt = require('jsonwebtoken'); exports.verifyToken = (req, res, next) => { const token = req.headers['authorization']; if (!token) return res.sendStatus(403); jwt.verify(token, process.env.JWT_SECRET, (err, user) => { if (err) return res.sendStatus(403); req.user = user; next(); }); };
Akhir sekali, mari gunakan perisian tengah untuk melindungi laluan. Contohnya, anda mungkin mahu pengguna mengakses profil mereka hanya selepas log masuk:
// routes/userRoutes.js const express = require('express'); const { verifyToken } = require('../middleware/authMiddleware'); const { getUserProfile } = require('../controllers/userController'); const router = express.Router(); router.get('/profile', verifyToken, getUserProfile); module.exports = router;
Perisian tengah verifyToken menyemak JWT yang sah dalam pengepala permintaan dan membenarkan akses kepada laluan jika token disahkan.
Dalam panduan ini, kami membincangkan perkara penting untuk melaksanakan pengesahan pengguna menggunakan JWT dalam aplikasi Node.js dan Express. Kami berjalan melalui penyediaan pendaftaran pengguna, log masuk dan melindungi laluan menggunakan pengesahan berasaskan token. Dengan asas ini, anda boleh membina sistem pengesahan yang teguh dan selamat dalam aplikasi anda sendiri. Semasa anda terus membangun, pertimbangkan untuk menambah token muat semula, kefungsian tetapan semula kata laluan dan pengesahan berbilang faktor untuk keselamatan yang dipertingkatkan.
Node.js와 Express로 인증을 마스터하면 확장 가능하고 안전한 웹 애플리케이션을 구축할 수 있습니다.
Atas ialah kandungan terperinci Menguasai Pengesahan dalam Node.js dan Express: Panduan Komprehensif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!