TIL

23/12/30 TIL __ Req.user 에 계속 값이 동일하게 담겨있다!!!

GABOJOK 2023. 12. 31. 01:12

 

 

 

미리 말씀드리지만 이건 저의 멍청한 실수때문에 헛수고를 한 기록이에요

 

 

 

 

내정보 조회 기능을 보완하던 중 뭔가 이상한 점을 발견했다. 

일단 구현하려던 기능은 이랬다.

기존 로직은 주소값에 포함된 유저 아이디 정보를 바탕으로 유저에 대한 데이터를 찾아서 보여주는 형식이였다. 

그런데 현재는 안전장치가 없어, 다른 유저가 아이디 숫자값만 바꾸게 된다면 다른 유저의 정보도 마음껏 볼 수 있는 구조였다. 

그래서 안전장치를 추가하기로 했다. 

내가 생각한 안전장치는 다음과 같다. 유저의 토큰 정보를 바탕으로 유저 정보를 추출하여 req.user에 유저 정보를 담는다 

그리고 그 유저정보와, 현재 주소값에 유저 아이디에 해당하는 유저 정보를 비교하여 만약 동일 유저가 아니라면 에러를 , 그것이 아니라 동일한 유저라면 유저 정보를 보여준다. 

 

현재 코드에서 req.user에 어떻게 데이터를 담냐면,
커스텀 데코레이터를 만들어서 req.user에 유저정보를 담아 보내주고 있었다. 

이를 활용하면 편하고 안전하게 유저 정보를 담아서 관리할 수 있기 때문이다.

nest에서 jwt 토큰에 담긴 유저 정보를 바탕으로 유저의 정보를 찾은 후

그 찾은 데이터를   req.user 객체에 담아 컨트롤러로 보내주는 로직을 작성했었다.

 

 

유저 내정보 조회 기능을 테스트 하기 위해 다른 유저 로그인을 하고, 토큰을 가지고 넣어서 테스트를 해봤는데 뭔가 이상했다. 

console.log 를 찍어보니 기존에 담긴 유저정보가 계속 담기고 있었다.

 

시간이 없어서 마음이 급해졌고, 빨리 찾으려다 보니 결국 못찾았는데, 다음날 천천히 다시 찾아보니 아주 아주 간단한 실수였다. 

 

 

그 이유는... 

유저 로그인 로직도 수정했는데 이 로직을 수정하면서 payload에 이메일을 담지 않았었다.

꽤나 중요한 개인정보라고 생각했기 때문이다. 그리고 그 사실을 망각한 채 ... 열심히 헤매고 있었다.

ㅎㅎ

 

 

처음 로직은 findByEamil이란 함수를 서비스 단에 추가해서 그 함수를 이용해 유저 정보를 가져오는 로직이였다.

그런데 payload에 eamil이란 정보를 찾을 수 없자 이전에 담아놓은 정보만 계속해서 호출되었던 것.!!!!!

 

findById라는 함수로 바꾸어 주고, where : {id}

이렇게 내용을 변경하자 잘 작동하였다...

 

 

 

제발 천천히 가라앉히고 생각하고 찾아보자.

아무리 급해도 !!!

급하게 생각한다고 해결되는건 없다.