이 애플리케이션은 세션 관리를 위해 JWT(JSON 웹 토큰)를 사용하고 비밀번호를 안전하게 저장하기 위해 bcrypt를 사용하여 Express로 구축된 간단한 인증 서버입니다. 사용자는 등록하고 로그인하여 보호된 경로에 액세스할 수 있습니다. MySQL은 사용자 데이터를 저장하는 데 사용됩니다.
1. Express.js: 경로 및 미들웨어를 처리하기 위한 웹 프레임워크
2. bcrypt.js: 비밀번호를 안전하게 해싱하기 위한 라이브러리.
3. jsonwebtoken: JWT 토큰 생성 및 검증을 위한 라이브러리
4. mysql2: Promises를 지원하는 Node.js용 MySQL 클라이언트
5. cookie-parser: 쿠키를 구문 분석하는 미들웨어.
1. 필수 라이브러리 가져오기
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
app.use(express.json()); app.use(cookieParser());
/등록
이 경로는 비밀번호를 해시하고 데이터베이스에 저장하여 새로운 사용자를 등록합니다.
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
/로그인
이 경로는 자격 증명을 확인하고 JWT 토큰을 생성하여 기존 사용자에 로그인합니다.
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
verifyToken 미들웨어는 유효한 JWT 토큰이 있는 요청만 보호된 경로에 액세스할 수 있도록 보장합니다.
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
인증된 사용자만 액세스할 수 있는 샘플 보호 경로입니다. 토큰의 사용자 이름을 사용하여 맞춤 인사말을 반환합니다.
app.use(express.json()); app.use(cookieParser());
서버는 정의된 PORT를 수신합니다.
app.post('/register', async (req, res) => { const { name, email, password } = req.body; try { // Check if user already exists const [rows] = await db.execute('SELECT * FROM users WHERE email = ?', [email]); if (rows.length > 0) { return res.status(400).json({ message: 'User already exists' }); } // Hash the password const hashedPassword = await bcrypt.hash(password, 10); // Save the user in the database await db.execute('INSERT INTO users (name, email, password) VALUES (?, ?, ?)', [name, email, hashedPassword]); res.status(201).json({ message: 'User registered successfully!' }); } catch (error) { console.error(error); res.status(500).json({ message: 'Server error' }); } });
app.post('/login', async (req, res) => { const { email, password } = req.body; try { // Find user const [rows] = await db.execute('SELECT * FROM users WHERE email = ?', [email]); const user = rows[0]; if (!user) { return res.status(400).json({ message: 'User not found' }); } // Check password const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(400).json({ message: 'Invalid credentials' }); } // Create JWT token const token = jwt.sign({ id: user.id, name: user.name, email: user.email }, JWT_SECRET, { expiresIn: '1h' }); // Set JWT in cookie res.cookie('token', token, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'Strict', maxAge: 3600000 // 1 hour }); res.json({ message: 'Logged in successfully!' }); } catch (error) { console.error(error); res.status(500).json({ message: 'Server error' }); } });
이 애플리케이션:
위 내용은 Express, JWT, Bcrypt 및 MySQL을 사용한 사용자 인증 API의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!