주제1 | refreshToken 인증미들웨어 |
작성이유 | 참고하기 위해 |
문제상황
상황 | 로그아웃시 자꾸 폐기되지 않은 토큰임에도 폐기된 정보라고 오류가 뜸 확인해보니Refresh 토큰을 token이라는 (스키마) 이름으로 저장중이였는데 리프레쉬로 찾아서 마치 비밀번호같은 값이 나옴 |
해결방법 | refreshToken을 (스키마에 저장된 이름인 ) token으로 바꿈 |
해결방법 풀이 | . |
그 외 | 콘솔로그로 일일히 찍어보니 내가 어디에서 값을 찾아오고 못찾아오는지 한눈에 보기가 쉬웠다. 감을 못잡고 헤맸는데 어떤것을 가져와야 할지, 어디서 오류가 나고 있는지를 눈으로 보니 한결 찾기 쉬워지고 코드리뷰 또한 하기 쉬워짐 |
로그아웃 코드는 아래의 주소에 넣어놨고,
인증미들웨어에 들어와서 아래의 기본 코드가 있는지 확인
상단에 요친구들 확인 :)
import dotEnv from 'dotenv';
콘솔로그의 힘을 알았던 오늘...
req.header에 담긴 authorization을 (나는 insomnia를 사용하는데 이렇게 토큰값에 들어간 것을 req.header에 담긴 authorization이라고 생각하면 됨)
콘솔에 찍어보니 다행히 refresh 토큰값이 잘 찍힌 것을 볼 수 있었다.
토큰형식이 일치하는지 Bearer sdsdadgawg : 이런식으로 Bearer 토큰형식과 빈칸과 refresh토큰으로 나눌 수 있으므로
스플릿을 활용하여 토큰이 Bearer 토큰형식 이 맞는지 확인한다.
이렇게 토큰이 있는지 확인 후에는 payload를 확인하는데
verify가 판별하다는 뜻이므로
페이로드 = jwt.verify(리프레쉬, 시크릿키) 조합으로 담아서 나중에 내가 가진 키와 비교할 수 있음
예를 들어 ∆ = ∞ + ⊖ 조합일때
∆요친구를 들고가면 ∞ + ⊖ 요친구를 비교할수 있다?
이렇게 생각하면 되지않으까...
아까 담은 페이로드에는 id와 날짜가 담겨 있어서 (jwt.io참고) id를 꺼내올 수 있음
=> 아까 내가 넣은 리프레쉬(여기서는 12번째 아이디의 리프레쉬토큰) 토큰에 담긴 페이로드를 찾아서 그 안에 있는 id(12)를 짚음
즉 저장된 토큰과 내가 받은 리프레쉬 토큰이 같은지 비교 후
true인지 판별
일치하면 아이디를 유저에 담고, req.user = user 에 담아서
로그아웃을 할 수 있는 auth.router에서 req.user = user 이거 사용 가능
주제 1 참고사이트 : https://8naji.tistory.com/189
로그아웃에 필요한 로그아웃 코드