하드코딩된 계정은 이제 그만! 파일에서 사용자 정보를 불러오자
- 사용자 정보를 JSON 파일(users.json)에 저장
- 로그인 시 해당 파일에서 사용자 정보 조회
- 세션으로 로그인 상태 유지
1. 프로젝트 구조
express-login-file/
├── index.js
└── users.json
2. users.json (사용자 정보)
[
{
"username": "admin",
"password": "1234"
},
{
"username": "user1",
"password": "pass1"
}
]
비밀번호는 암호화되지 않은 상태로 저장되어 있지만, 실제 서비스에서는 bcrypt 등의 해시 함수를 사용해야 안전합니다.
3. index.js 전체 코드
const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');
const fs = require('fs');
const app = express();
const PORT = 3000;
// 미들웨어
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'fileLoginSecret',
resave: false,
saveUninitialized: true
}));
// 사용자 데이터 불러오기 함수
function getUsers() {
const data = fs.readFileSync('./users.json', 'utf-8');
return JSON.parse(data);
}
// 로그인 폼
app.get('/login', (req, res) => {
if (req.session.user) return res.redirect('/mypage');
res.send(`
<h2>로그인</h2>
<form method="post" action="/login">
<input type="text" name="username" placeholder="아이디" required />
<input type="password" name="password" placeholder="비밀번호" required />
<button type="submit">로그인</button>
</form>
`);
});
// 로그인 처리
app.post('/login', (req, res) => {
const { username, password } = req.body;
const users = getUsers();
const foundUser = users.find(u => u.username === username && u.password === password);
if (foundUser) {
req.session.user = { username };
res.redirect('/mypage');
} else {
res.send('<h3>로그인 실패! 사용자 정보가 없습니다.</h3>');
}
});
// 마이페이지
app.get('/mypage', (req, res) => {
if (!req.session.user) return res.redirect('/login');
res.send(`
<h2>마이페이지</h2>
<p>${req.session.user.username}님, 환영합니다</p>
<a href="/logout">로그아웃</a>
`);
});
// 로그아웃
app.get('/logout', (req, res) => {
req.session.destroy(() => {
res.redirect('/login');
});
});
// 서버 실행
app.listen(PORT, () => {
console.log(`서버 실행 중: http://localhost:${PORT}`);
});
4. 코드 실행
- cmd창에서 node index.js
- 브라우저에서 "localhost:3000/login" 페이지 접속
- 'user1', 'pass1'으로 접속시 아래 페이지가 보입니다.
5. 테스트 방법
- users.json에 있는 유저 정보로 로그인 시도
- 성공하면 /mypage로 리디렉션
- 실패하면 실패 메시지
- 로그인 상태는 세션으로 유지됨
- /logout으로 세션 제거 가능
6. 보안 주의사항
- users.json은 보안에 취약하므로, 반드시 서버 내에서만 사용해야 해요.
- 비밀번호는 반드시 해시 암호화(bcrypt) 해야 안전합니다.
- 파일 대신 DB 사용을 추천 (ex. MongoDB, MySQL, SQLite 등)
'IT속으로' 카테고리의 다른 글
Node.js + Express + MySQL로 로그인 시스템 만들기 (0) | 2025.04.06 |
---|---|
Node.js + Express + SQLite로 로그인 기능 만들기 (0) | 2025.04.06 |
node.js Express + Session 으로 로그인 상태 유지하기 (0) | 2025.04.06 |
Node.js + Express로 로그인 기능 만들기 (0) | 2025.04.04 |
Node.js Express로 더 쉽게 서버 구축하기 (0) | 2025.04.04 |
댓글