인증은 개발자가 승인된 사용자만 특정 기능이나 데이터에 액세스할 수 있도록 보장하는 최신 웹 애플리케이션의 중요한 구성 요소입니다. Node.js 및 Express 기반 애플리케이션에서 인증은 효율성과 보안으로 인해 일반적으로 토큰, 가장 일반적으로 JWT(JSON 웹 토큰)를 사용하여 처리됩니다.
이 가이드에서는 JWT를 사용하여 Node.js 및 Express 애플리케이션에서 사용자 인증을 설정하는 방법을 살펴보겠습니다. 마지막에는 자신의 프로젝트에 대한 보안 인증을 구현하는 방법을 확실히 이해하게 될 것입니다.
인증은 사용자나 시스템의 신원을 확인하는 프로세스입니다. 웹 애플리케이션에서는 사용자 이름 및 비밀번호와 같은 사용자 자격 증명을 확인하는 작업이 포함됩니다. 성공적으로 검증되면 시스템은 사용자가 애플리케이션과 상호 작용할 수 있도록 허용합니다. 보안 강화를 위해 JWT와 같은 토큰 기반 인증이 일반적으로 사용됩니다.
JWT는 안전한 상태 비저장 토큰 기반 인증을 위한 업계 표준(RFC 7519)입니다. 이를 통해 정보가 JSON 개체로 당사자 간에 안전하게 전송될 수 있습니다. 토큰은 서버에 세션 데이터를 저장할 필요 없이 사용자의 신원을 확인하는 데 사용되는 경우가 많으므로 JWT는 상태 비저장 애플리케이션에 탁월한 선택입니다.
Node.js와 Express에서 JWT를 사용한 기본 인증 시스템의 구현을 분석해 보겠습니다.
인증을 시작하기 전에 기본 Node.js 및 Express 애플리케이션을 설정해야 합니다. 프로젝트를 초기화하려면 다음 단계를 따르세요.
mkdir auth-demo cd auth-demo npm init -y npm install express bcryptjs jsonwebtoken mongoose dotenv
각 종속성의 목적은 다음과 같습니다.
프로젝트의 루트 디렉토리에 .env 파일을 생성하여 데이터베이스 URI 및 JWT 비밀 키와 같은 민감한 정보를 저장하세요.
MONGODB_URI=mongodb://localhost:27017/auth-demo JWT_SECRET=your_jwt_secret_key
프로젝트 루트에서 config 폴더 내에 db.js 파일을 생성하여 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;
다음으로 MongoDB에서 사용자 문서의 구조를 정의하는 사용자 모델을 만듭니다. 모델 폴더 안에 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);
이제 사용자 등록 경로를 설정하겠습니다. Controllers 폴더에 authController.js라는 파일을 생성하고 등록 로직을 구현하세요.
// 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 }); } };
이 로직은 MongoDB에 사용자 정보를 저장하기 전에 bcrypt를 사용하여 비밀번호를 해시합니다.
클라이언트가 향후 요청을 인증하는 데 사용할 JWT를 생성하고 반환하려면 로그인이 중요합니다. 로그인 로직을 구현하는 방법은 다음과 같습니다.
// 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 }); } };
로그인에 성공하면 jsonwebtoken을 사용하여 JWT를 생성하고 클라이언트에 보냅니다.
JWT는 인증이 필요한 경로를 보호하는 데 유용합니다. 토큰을 확인하고 승인된 사용자만 특정 엔드포인트에 액세스할 수 있도록 미들웨어를 만들겠습니다.
// 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(); }); };
마지막으로 경로 보호를 위해 미들웨어를 적용해 보겠습니다. 예를 들어, 사용자가 로그인한 후에만 자신의 프로필에 액세스하도록 할 수 있습니다.
// 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;
verifyToken 미들웨어는 요청 헤더에서 유효한 JWT를 확인하고 토큰이 확인되면 경로에 대한 액세스를 허용합니다.
이 가이드에서는 Node.js 및 Express 애플리케이션에서 JWT를 사용하여 사용자 인증을 구현하는 데 필요한 필수 사항을 다루었습니다. 토큰 기반 인증을 사용하여 사용자 등록, 로그인 및 경로 보호를 설정하는 과정을 살펴보았습니다. 이러한 기반을 통해 귀하는 자신의 애플리케이션에 강력하고 안전한 인증 시스템을 구축할 수 있습니다. 계속 개발하면서 보안 강화를 위해 새로 고침 토큰, 비밀번호 재설정 기능 및 다단계 인증을 추가하는 것을 고려해 보세요.
Node.js と Express を使用した認証をマスターすることで、スケーラブルで安全な Web アプリケーションの構築に向けて順調に進んでいます。
위 내용은 Node.js 및 Express에서 인증 마스터하기: 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!