このアプリケーションは、Express で構築されたシンプルな認証サーバーであり、セッション管理に JSON Web Token (JWT) を使用し、パスワードを安全に保存するために bcrypt を使用します。ユーザーは登録およびログインして、保護されたルートにアクセスできます。 MySQL はユーザー データの保存に使用されます。
1. Express.js: ルートとミドルウェアを処理するための Web フレームワーク。
2. bcrypt.js: パスワードを安全にハッシュするためのライブラリ。
3. jsonwebtoken: JWT トークンを作成および検証するためのライブラリ。
4. mysql2: Promises をサポートする Node.js 用の MySQL クライアント。
5. cookie-parser: Cookie を解析するためのミドルウェア。
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());
サーバーは定義されたポートをリッスンします。
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 中国語 Web サイトの他の関連記事を参照してください。