>웹 프론트엔드 >JS 튜토리얼 >Node.js 및 Express에서 인증 마스터하기: 종합 가이드

Node.js 및 Express에서 인증 마스터하기: 종합 가이드

Barbara Streisand
Barbara Streisand원래의
2024-10-04 16:20:29802검색

Mastering Authentication in Node.js and Express: A Comprehensive Guide

인증은 개발자가 승인된 사용자만 특정 기능이나 데이터에 액세스할 수 있도록 보장하는 최신 웹 애플리케이션의 중요한 구성 요소입니다. Node.js 및 Express 기반 애플리케이션에서 인증은 효율성과 보안으로 인해 일반적으로 토큰, 가장 일반적으로 JWT(JSON 웹 토큰)를 사용하여 처리됩니다.

이 가이드에서는 JWT를 사용하여 Node.js 및 Express 애플리케이션에서 사용자 인증을 설정하는 방법을 살펴보겠습니다. 마지막에는 자신의 프로젝트에 대한 보안 인증을 구현하는 방법을 확실히 이해하게 될 것입니다.

인증이란 무엇인가요?

인증은 사용자나 시스템의 신원을 확인하는 프로세스입니다. 웹 애플리케이션에서는 사용자 이름 및 비밀번호와 같은 사용자 자격 증명을 확인하는 작업이 포함됩니다. 성공적으로 검증되면 시스템은 사용자가 애플리케이션과 상호 작용할 수 있도록 허용합니다. 보안 강화를 위해 JWT와 같은 토큰 기반 인증이 일반적으로 사용됩니다.

JSON 웹 토큰(JWT)을 사용하는 이유는 무엇인가요?

JWT는 안전한 상태 비저장 토큰 기반 인증을 위한 업계 표준(RFC 7519)입니다. 이를 통해 정보가 JSON 개체로 당사자 간에 안전하게 전송될 수 있습니다. 토큰은 서버에 세션 데이터를 저장할 필요 없이 사용자의 신원을 확인하는 데 사용되는 경우가 많으므로 JWT는 상태 비저장 애플리케이션에 탁월한 선택입니다.

단계별: Node.js 및 Express에서 인증 구현

Node.js와 Express에서 JWT를 사용한 기본 인증 시스템의 구현을 분석해 보겠습니다.

1. Node.js 애플리케이션 설정

인증을 시작하기 전에 기본 Node.js 및 Express 애플리케이션을 설정해야 합니다. 프로젝트를 초기화하려면 다음 단계를 따르세요.


mkdir auth-demo
cd auth-demo
npm init -y
npm install express bcryptjs jsonwebtoken mongoose dotenv


각 종속성의 목적은 다음과 같습니다.

  • express: Node.js 서버 구축을 위한 프레임워크
  • bcryptjs: 비밀번호를 안전하게 해시하고 비교합니다.
  • jsonwebtoken: JWT 생성 및 확인용.
  • mongoose: MongoDB와 상호작용합니다.
  • dotenv: 비밀, 데이터베이스 연결 문자열과 같은 환경 변수를 관리합니다.

2. 환경 변수 구성

프로젝트의 루트 디렉토리에 .env 파일을 생성하여 데이터베이스 URI 및 JWT 비밀 키와 같은 민감한 정보를 저장하세요.


MONGODB_URI=mongodb://localhost:27017/auth-demo
JWT_SECRET=your_jwt_secret_key


3. MongoDB에 연결

프로젝트 루트에서 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;


4. 사용자 모델 생성

다음으로 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);


5. 사용자 등록 구현

이제 사용자 등록 경로를 설정하겠습니다. 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를 사용하여 비밀번호를 해시합니다.

6. 사용자 로그인 구현

클라이언트가 향후 요청을 인증하는 데 사용할 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를 생성하고 클라이언트에 보냅니다.

7. 보호된 경로를 위한 미들웨어 설정

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();
  });
};


8. 인증 미들웨어 적용

마지막으로 경로 보호를 위해 미들웨어를 적용해 보겠습니다. 예를 들어, 사용자가 로그인한 후에만 자신의 프로필에 액세스하도록 할 수 있습니다.


// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.