미니프로젝트 주차
1. 진행사항
1) 이메일 인증
2) bcrypt
2. 새로 시도한 것
1) 이메일 인증(nodemailer)
- npm 라이브러리이며, Node.js 환경에서 이메일 전송을 간편하게 처리하기 위한 모듈
- SMTP(Simple Mail Transfer Protocol)방식
- nodemailer는 다양한 이메일 사이트와 호환되며 이메일 템플릿, 첨부 파일등의 옵션 보유
- npm install nodemailer, const nodemailer = require('nodemailer')
- 예시 코드
2) bcrypt
- bcrypt는 Node.js에서 비밀번호를 해싱(hashing)하기 위한 패키지, 보안 강화
- saltRounds : bcrypt 알고리즘에서 해시에 사용되는 솔트(rounds)의 수를 지정하는 옵션
- salt는 해시를 생성할 때 사용되는 임의의 데이터이며, 같은 비밀번호에 대해 매번 다른 값을 생성하여 해시를 생성함
- saltRounds 값을 높일수록 해시에 사용되는 솔트의 반복 횟수가 증가하여 보안성이 증가하지만 연산속도도 늘어남
- 일반적으로 10~12로 권장
- npm install bcrypt, const bcrypt = require("bcryptjs");
- 예시 코드
3. 고찰
1) 이메일 인증
- 랜덤 난수 구현 코드와 레디스의 데이터 만료 기능을 이용하여 이메일 인증을 구상하였으나 시간이 부족하여 코드 테스트를 진행하지 못하였다. 다음 프로젝트에 적용 예정
- EJS(Effective JavaScript) 템플릿 엔진을 사용하여 이메일 템플릿을 렌더링가능
- EJS 라이브러리와 ejs.renderFile() 함수로 구현 가능, 다음 프로젝트에 적용 예정
2) bcrypt
- bcrypt 패키지는 비밀번호 해싱하여 클라이언트들의 안전한 비밀번호 저장이 가능하게 해줌
- 라이브러리로 간단하게 보안성을 강화 하였고,
검증하는 데 사용되며 , 보안을 강화하기 위한 다양한 옵션과 기능을 제공합니다. 안전한 비밀번호 저장 및 비교를 위해 bcrypt 패키지를 사용하는 것이 좋습니다.
4. 트러블 슈팅
1) npm supertest를 통해 통합 테스트를 진행하는데 로그인 유지가 안되었음
2) supertest.agent를 사용(http 요청을 보내고, 세션 유지가 가능)
3) 로그인 요청을 보낸 뒤 세션을 유지, 유지상태에서 인증필요 기능들 요청하게 하여 해결
4) 코드 예시
const request = require('supertest');
const app = require('./app'); // 테스트 대상 애플리케이션의 모듈을 가져옵니다.
const agent = request.agent(app);
agent
.post('/login')
.send({ username: 'user', password: 'password' })
.end((err, res) => {
// 로그인 요청 후의 처리 작업을 수행합니다.
// 세션을 유지하고 있는 상태로 다른 요청을 보낼 수 있습니다.
});
agent
.get('/protected-route')
.end((err, res) => {
// 세션을 유지한 상태에서 보호된 경로에 대한 요청을 처리합니다.
// 응답을 검증하고 원하는 결과를 확인할 수 있습니다.
});
'항해14기 본과정 > 항해14기 개발일지' 카테고리의 다른 글
[항해 14기] 개발일지34 (미니프로젝트 - 회고, 발표) (0) | 2023.05.11 |
---|---|
[항해 14기] 개발일지33 (미니 프로젝트 - Sentry, 디자인 패턴 - 어댑터) (0) | 2023.05.11 |
[항해 14기] 개발일지31 (미니 프로젝트 - 리팩토링, 배포, FE연결) (0) | 2023.05.08 |
[항해 14기] 개발일지30 (미니 프로젝트 - Auth/User기능 구현) (0) | 2023.05.06 |
[항해 14기] 개발일지29 (미니 프로젝트 - 발제) (0) | 2023.05.05 |