회원가입과 로그인 기능 구현을 완료하였지만, 토큰 부여 방식이 잘 적용되지 않아 애를 먹다 미들웨어를 통해 header에 Authorization 값을 통한 검증 방법으로 코드를 구성하기로 했고 코드 작성을 조원 분이 도와주셨다.
로그인을 통해 생성된 헤더 토큰 값을 req로 보내, 로그인 여부를 확인해 비로그인 유저와 로그인 유저의 기능을 다르게 부여하는 걸로 방향을 잡았다.
// authmiddlewares.js
async function authmiddleware(req, res, next) {
// headers에 인가 값을 활용해 다른 기능 사용에 제한을 둔다.
const token = req.headers.authorization;
완성된 미들웨어는 아래와 같이 authmiddleware로 활용한다.
// // 회원정보 수정
router.patch('/profile', authmiddleware, usersController.updateUser);
// // 회원정보 삭제
router.delete('/signout', authmiddleware, usersController.deleteUser);
아래는 회원 정보 수정의 컨트롤러이다. useId를 미들웨어에서 JWT 키를 이용해 생성하여 미들웨어로써 활용하고 있다.
// 회원정보 수정
updateUser = async (req, res) => {
try {
const { nickname, sentence } = req.body;
const userId = res.locals.user;
await this.userService.updateUser(userId, nickname, sentence);
return res
.status(200)
.json({ message: '회원 정보 수정에 성공하였습니다.' });
} catch (error) {
console.error('Update Error:', error);
return res
.status(400)
.json({ message: '회원 정보 수정에 실패하였습니다.' });
}
};
// authmiddlewares.js
const { userId } = jwt.verify(authToken, process.env.JWT_SECRET);
res.locals.user = userId;
완성된 미들웨어를 통해 아래와 같이 로그인 된 유저를 인가(**Authorization)** 한다.
router.post('/boards', authmiddleware, boardsController.makeBoard);
router.get('/boards', authmiddleware, boardsController.getBoards);
router.get('/boards/:boardId', authmiddleware, boardsController.showABoard);
router.patch('/boards/:boardId', authmiddleware, boardsController.updateBoard);
router.delete('/boards/:boardId', authmiddleware, boardsController.removeBoard);
출처 : < 자바스크립트 기초 강좌 : 100분 완성, 코딩앙마 >
코드를 작성할 땐 데이터 부하를 고려하여 작성하면 더 좋다.
: 현재 예시는 &&(and)에 관련 되었다. 운전면허가 있는 건 전체 군인의 80로라 한다면 앞에 들어갈 내용은 운전면허라는 전체의 80프로를 검증하기 보단 여군이라는 내용으로 앞에 배치하면 결과 값을 줄일 수 있기에 성능 최적화가 가능하다.
현재는 기능 구현을 최우선으로 삼지만, 이후엔 성능 최적화도 신경써야 한다.