node.js
[node.js - express]회원가입 구현하기
Heoky
2022. 1. 16. 18:03
전에 app.js 에서 나눴던 router를 server.use()를 통해 불러 왔었다.
const express = require('express');
const server = express();
const userRouter = require('./routes/user');
server.use('/user', userRouter);
server.listen(3065, () => {
console.log('서버를 실행중입니다.');
});
이제 프론트에서 회원가입 시 post 요청을 통해 회원가입 정보를 보낼 것이고 이를 서버에서 받아 database에 넣어준다.
routes/user.js
const router = require('express').Router();
const bcrypt = require('bcrypt');
const { User } = require('../models');
// POST /user/, 회원가입
router.post('/', async (req, res) => {
try {
// 중복확인
const alreadyUserId = await User.findOne({
where: {
email: req.body.email,
},
});
if (alreadyUserId) {
return res.status(403).send('이미 사용중인 계정입니다.');
}
// User table에 가입 정보 생성
const hashedPassword = await bcrypt.hash(req.body.password, 10);
await User.create({
email: req.body.email,
nickname: req.body.nickname,
password: hashedPassword, // 비밀번호를 그대로 받아오면 보안에 위협, 라이브러리를 통한 보안 장치 장착
});
res.status(201).send('signup OK');
} catch (err) {
console.error(err);
next(err); // status 500, next를 통해 error를 보낼 수 있다
}
});
module.exports = router;
회원가입 요청이 data와 함께 서버로 넘어오면 받은 data를 가지고 중복확인을 해주는데 findOne({ where: { email: ...} })를 통해
입력한 email이 database에 있는지 찾아준다. 있다면 status(403)에러 "이미 사용중인 계정입니다." 라고 알린다.
이때 req.body.email은 data.email을 뜻한다. 그리고 req.body를 통해 data를 받아오기 위해 app.js에서 설정해줘야 하는것이 있다.
// app.js
// front에서 받아온 data를 req.body안으로 넣어준다, json 형식으로
server.use(express.json());
server.use(express.urlencoded({ extended: true }));
// User table에 가입 정보 생성
const hashedPassword = await bcrypt.hash(req.body.password, 10);
await User.create({
email: req.body.email,
nickname: req.body.nickname,
password: hashedPassword, // 비밀번호를 그대로 받아오면 보안에 위협, 라이브러리를 통한 보안 장치 장착
});
res.status(201).send('signup OK');
} catch (err) {
console.error(err);
next(err); // status 500, next를 통해 error를 보낼 수 있다
}
중복확인을 했다면, User 테이블에 create를 통해 받아온 정보를 넣어준다. 이 때 잘 받아 왔다면 status(201)을 반환한다.
서버에서의 error는 catch(err)를 통해 error를 알린다.
password의 같은 경우 그대로 받아오면 보안에 위협이 되기 때문에 bcrypt 라이브러리를 통해 hashing 처리를 해준다.
보통 10으로 설정한다. 숫자가 높은 경우 보안에 더 뛰어나지만 서버가 느려질수 있다.