bcrypt 방식으로 비밀번호를 암호화 할 것이기 때문에 npm i bcrypt로 설치한다.

 

 

 

 

User 모델과 bcrypt를 사용을 선언한 후, POST 컨트롤러에 bcrypt로 패스워드를 암호화 한다. 그리고 create()로 user DB에 저장한다. 성공했으면 화면에 json 형식으로 나타나게 하였다.

 

 

 

 

 

 

아이디와 비밀번호를 'admin'으로 등록해봤다. 패스워드가 'admin'이 아닌 암호화 되어 있는 걸 확인할 수 있다.

 

 

 

 

출처 : https://www.youtube.com/playlist?list=PLG7te9eYUi7vxSvo6hvhOaht8oP0PoCwi

 

Do it! Node.js 프로그래밍 입문

이지스퍼블리싱 《Do it! Node.js 프로그래밍 입문》 저자 직강 무료 동영상 강의입니다. ▶ 책 보러가기 : http://www.easyspub.co.kr/20_Menu/BookView/PUB/626/PUB

www.youtube.com

 

 

 

연락처 수정

 

우선 GET 방식으로 해당 ejs 템플릿(업데이트 페이지)를 서버에서 가져오도록 한다. 수정하길 원하는 contact 값과 함께

 

 

 

업데이트 페이지의 input 값에 수정을 원하는 값들을 집어넣는다.

 

 

 

 

홈페이지 ejs에서 수정 페이지로 넘어갈 수 있도록 수정 페이지를 보여주는 GET 주소를 넣어준다. (해당 contact의 id 값을 파라미터로 전달)

 

 

 

그럼 수정 버튼을 눌렀을 때, 수정페이지로 넘어감과 동시에 수정하기 원하는 값들 역시 불러와진다.

 

 

 

 

 

 

form 태그는 method 요소에 GET과 POST 밖에 설정할 수 없다. 해당 form을 PUT과 DELETE로 보내고 싶다면 method-override를 이용한다. 서버를 끄고 터미널에 npm i method-override를 쳐서 설치한다.

 

 

 

 

 

그럼 애플리케이션에서 method-override를 사용하겠다는 것을 선언해야 한다.

 

 

 

 

저번에 만들어 놓은 업데이트 컨트롤러, PUT 방식이다. 마지막에 화면 페이지에 json을 보여줄 것이라고 설정했었는데, 이를 지우고 /contacts 경로(홈페이지 경로) 로 리다이렉트 하게끔 했다.

 

 

 

 

 

 

업데이트 ejs 파일에 가서 form에서 action에 수정 컨트롤러 에 대한 주소를 적은 뒤, ?_method=PUT 을 추가하여 이 form이 PUT 방식으로 전달하겠다는 것을 설정한다.

 

 

 

 

 

이름이 hong 인 것을 다음과 같이 수정하였다. 제대로 수정된 걸 확인할 수 있다.

 

 

 

 

 

 

 

 

연락처 삭제

 

간단하다 우선 이미 만들어 놓은 delete 컨트롤러에 홈페이지로 리다이렉트 하겠다는 코드를 추가하고, 홈페이지 ejs의 삭제 버튼을 input으로 만든 뒤 다음과 같이 form으로 감싼 후 action 요소의 주소 안에 method로 DELETE임을 설정하였다.

 

 

 

 

 

 

kim 을 삭제하자 리다이렉트 되어 kim이 없어진 걸 확인할 수 있었다.

 

 

 

 

 

몽고 DB에서도 확인해본 결과 kim에 대한 데이터가 사라졌다.

 

 

 

비밀번호 암호화

 

 

암호화를 하는데 사용하는 기능은 SHA-512, BCrypt 가 있는데, SHA-512 기능은 성능이 너무 좋아 권장하지 않는다. GPU의 연산속도가 빠르기 때문에 공격자의 하드웨어를 통한 오프라인 brute force에 더 취약하다. 빠른 해시를 사용하여 암호화를 진행시 공격자는 오프라인 공격으로 초당 수십억개의 해시를 계산할 수 있다.

 

그래서 요즘은 BCrypt를 이용하여 비밀번호 암호화를 하는 편이다.

 

 

 

 

암호화 된 비밀번호를 비교하는 방법, BCrypt.checkpw(비밀번호, 비밀번호) 를 사용한다.

 

 

@Transactional

이 어노테이션은 서비스 함수를 실행할 때 어느 한 곳에 문제가 발생하였을 경우 그 전에 진행되었던 모든 작업을 원래대로 리셋한다. 돈을 송금하는 ATM기를 예를 들어 설명하면, 일단 돈을 보냈으면 본인의 통장에 돈이 빠져나갔을 것이다. 하지만 전송하는데 실패를 했을 경우 받을 사람의 통장에 돈이 들어가지 않았을 것이다. 그럼 본인의 통장에도 돈이 빠져나갔고, 받을 사람의 통장에도 돈이 들어오지 않았으니 문제가 된다. 이를 방지하기 위해 돈 송금 실패시, 모든 작업을 리셋하여 보낸 사람의 통장에 보냈던 돈을 다시 소유하게끔 하는 작업..

 

+ Recent posts