2021.05.20 - [내가 공부하는것/JavaScript] - [NodeJS] 로그인/회원가입 구현하기 (로그인편)
>> 내용이 잘 보이지 않는다면 우측 하단의 달 모양을 클릭해주시기 바랍니다. <<
백엔드 작업을 하다보면 거의 필수로 작업하게 되는게 바로, 로그인 작업이다.
필자도 로그인작업을 여러번 해 보았지만 최근에 새로운 이슈가 생겨 이 이슈를 해결하는 과정을 적어보려고 한다.
기본적으로 아래 모듈들을 설치해두는것을 추천한다.
express / mysql / cors / body-parser / cookie-parser / express-session / bcrypt
우선, 로그인을 하기 위해서는 회원 정보가 필요하니 회원가입을 만든다고 가정하자.
클라이언트에서 POST 로 id 와 pw 를 받는다고 해보자
클라이언트로부터 값을 받아오자
index.js
const bodyParser require('body-parser')
app.use(express.json())
app.use(bodyParser.urlencoded({ extended: true }))
router.js
router.post('/register', (req,res,next) =>{
console.log(req.body)
res.end()
})
이런식으로 작성을 해 준다면, 클라이언트에서 값을 받아올 수 있을것이다.
데이터베이스와 연결을 하자
필자는 그래도 보안을 위해 파일을 분리해 두었다.
모듈을 분리하는 방법은 나중에 따로 다루도록 하겠다.
config.js
const mysql = require('mysql')
const db = mysql.createConnection({
host : "localhost",
user : 'root',
password : 'root',
port : 3306,
database:'dbs'
})
db.connect();
module.exports = db;
router.js
const db = require('../db/config')
router.post('/register', (req,res,next) =>{
console.log(req.body)
res.end()
})
이런식으로 작성을 해준다면 연동이 잘 될것이다.
만약, 여기서 오류가 난다면 mysql.createConnection() 부분에서 정보 입력에 문제가 생긴것이니 잘 확인해보도록.
router.js 에서 이제 db에 값을 넣어줄것이다.
그 전에 sql 문을 어떻게 하는지 알아보자.
SQL INSERT 문
입력받은 값을 db에 저장하기 위해서는 insert 문이 필요하다.
우선, 간단하게 db구성이 어떻게 되어있는지 알아보자.
member Table
id | pw | name |
- | - | - |
테이블이 이렇게 짜져있다고 가정을 해보자.
id 와 pw , name 에 insert 시켜야 하므로
INSERT INTO member(`id`,`pw`,`name`) VALUES ('ids','pws','ngyu');
이와같이 인서트문을 작성해준다면
member Table
id | pw | name |
ids | pws | ngyu |
이런식으로 들어갈 것이다.
자 이제 instert문을 알았으니 한번 코드를 적용해보자
router.js
const db = require('../db/config')
router.post('/register', (req,res,next) =>{
const param = [req.body.id, req.body.pw, req.body.name]
db.query('INSERT INTO member(`id`,`pw`,`name`) VALUES (?,?,?)' , param , (err, row) =>{
if(err) console.log(err)
})
res.end()
})
이렇게 작성을 해주면 db에 회원 정보가 업로드 될 것이다.
비밀번호 보안
회원 정보를 저장할 때 관리자도 함부로 접근할 수 없도록 비밀번호를 저장하는것이 가장 현명한 보안이라고 생각한다.
관리자도 보기 힘든 조건을 만족하기 위하여 우리는 bcrypt 를 이용할 것이다.
router.js
const db = require('../db/config')
const bcrypt = require('bcrypt')
const saltRounds = 10
router.post('/register', (req,res,next) =>{
const param = [req.body.id, req.body.pw, req.body.name]
db.query('INSERT INTO member(`id`,`pw`,`name`) VALUES (?,?,?)' , param , (err, row) =>{
if(err) console.log(err)
})
res.end()
})
여기서 갑자기 보이는 saltRounds 는 무엇을 의미하는 것일까?
예상컨데 암호화를 몇번 진행할 것인지 정하는것 같다.
자 그럼 이 bcrypt를 적용해보자.
비밀번호를 암호화 하는 방법은 bcrypt에서 제공하는 hash 함수를 사용하면 된다.
router.js
const db = require('../db/config')
const bcrypt = require('bcrypt')
const saltRounds = 10
router.post('/register', (req,res,next) =>{
const param = [req.body.id, req.body.pw, req.body.name]
bcrypt.hash(param[1], saltRounds, (error , hash)=>{
param[1] = hash
db.query('INSERT INTO member(`id`,`pw`,`name`) VALUES (?,?,?)' , param , (err, row) =>{
if(err) console.log(err)
})
})
res.end()
})
이렇게 해주면 암호화된 비밀번호를 db에 저장시켜준다.
이렇게 회원가입 부분은 끝이 났다.
'JavaScript > Nodejs' 카테고리의 다른 글
[Nodejs] 로그인/회원가입 구현하기 (세션유지편) (0) | 2021.05.21 |
---|---|
[NodeJS] 로그인/회원가입 구현하기 (로그인편) (4) | 2021.05.20 |
[Node.js] 콜백지옥 벗어나기 async / await (1) | 2021.02.06 |
[Node.js] 콜백지옥 벗어나기 promise (0) | 2021.02.03 |
[Node.js] 메이플스토리 api 사용하기(2) - 크롤링, SoapApi (2) | 2020.12.16 |