refactor: 로그인 API의 DB 스키마 및 구조 개선
- 새로운 DB 스키마(v2) 추가 (테이블명 snake_case, FK 적용) - 룰.md에 API 성능 관리 규칙 추가 - 로그인 관련 로직을 새로운 스키마에 맞게 수정 - Service와 Model의 역할 분리를 명확하게 리팩토링
This commit is contained in:
@@ -1,56 +1,29 @@
|
||||
const { getDb } = require('../dbPool');
|
||||
const bcrypt = require('bcryptjs');
|
||||
const jwt = require('jsonwebtoken');
|
||||
const authService = require('../services/auth.service');
|
||||
|
||||
exports.login = async (req, res) => {
|
||||
const login = async (req, res) => {
|
||||
try {
|
||||
const { username, password } = req.body;
|
||||
const db = await getDb();
|
||||
const ipAddress = req.ip || req.connection.remoteAddress;
|
||||
const userAgent = req.headers['user-agent'];
|
||||
|
||||
const [rows] = await db.query(
|
||||
'SELECT * FROM Users WHERE username = ?',
|
||||
[username]
|
||||
);
|
||||
|
||||
if (rows.length === 0) {
|
||||
return res.status(401).json({ error: '존재하지 않는 사용자입니다.' });
|
||||
if (!username || !password) {
|
||||
return res.status(400).json({ error: '사용자명과 비밀번호를 입력해주세요.' });
|
||||
}
|
||||
|
||||
const user = rows[0];
|
||||
const isMatch = await bcrypt.compare(password, user.password);
|
||||
if (!isMatch) {
|
||||
return res.status(401).json({ error: '비밀번호가 일치하지 않습니다.' });
|
||||
const result = await authService.loginService(username, password, ipAddress, userAgent);
|
||||
|
||||
if (!result.success) {
|
||||
return res.status(result.status || 400).json({ error: result.error });
|
||||
}
|
||||
|
||||
// JWT 토큰 생성
|
||||
const token = jwt.sign(
|
||||
{
|
||||
user_id: user.user_id,
|
||||
username: user.username,
|
||||
name: user.name,
|
||||
role: user.role,
|
||||
access_level: user.access_level,
|
||||
worker_id: user.worker_id
|
||||
},
|
||||
process.env.JWT_SECRET,
|
||||
{ expiresIn: '1d' }
|
||||
);
|
||||
res.json(result.data);
|
||||
|
||||
// 토큰 포함 응답
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
token,
|
||||
user_id: user.user_id,
|
||||
username: user.username,
|
||||
role: user.role
|
||||
});
|
||||
|
||||
} catch (err) {
|
||||
console.error('[로그인 오류]', err);
|
||||
return res.status(500).json({
|
||||
error: '서버 내부 오류',
|
||||
detail: err.message || String(err)
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Login controller error:', error);
|
||||
res.status(500).json({ error: error.message || '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -175,4 +148,8 @@ exports.getAllUsers = async (req, res) => {
|
||||
console.error('[사용자 목록 조회 실패]', err);
|
||||
res.status(500).json({ error: '서버 오류' });
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
login
|
||||
};
|
||||
Reference in New Issue
Block a user