카테고리 없음

240604 TIL 서른다섯번째날 팀프로젝트 - 로그아웃2 인증미들웨어

8나지 2024. 6. 4. 22:11
주제1 refreshToken 인증미들웨어
작성이유 참고하기 위해

 

문제상황

상황 로그아웃시 자꾸 폐기되지 않은 토큰임에도 폐기된 정보라고 오류가 뜸 
확인해보니
Refresh 토큰을 token이라는 (스키마) 이름으로 저장중이였는데 리프레쉬로 찾아서 마치 비밀번호같은 값이 나옴
해결방법  refreshToken (스키마에 저장된 이름인 ) token으로 바꿈
해결방법 풀이 .
그 외 콘솔로그로 일일히 찍어보니 내가 어디에서 값을 찾아오고 못찾아오는지 한눈에 보기가 쉬웠다. 감을 못잡고 헤맸는데 어떤것을 가져와야 할지, 어디서 오류가 나고 있는지를 눈으로 보니 한결 찾기 쉬워지고 코드리뷰 또한 하기 쉬워짐

 


로그아웃 코드는 아래의 주소에 넣어놨고,

 

인증미들웨어에 들어와서 아래의 기본 코드가 있는지 확인

더보기

상단에 요친구들 확인 :)

import dotEnv from 'dotenv';

import jwt from 'jsonwebtoken';
import bcrypt from 'bcrypt';
import { MESSAGES } from '../const/messages.const.js';
import { HTTP_STATUS } from '../const/http-status.const.js';
import { prisma } from '../utils/prisma/index.js';
dotEnv.config();

콘솔로그의 힘을 알았던 오늘... 

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

 

240604 TIL 서른다섯번째날 팀프로젝트 - 코드참고

작성이유 : 나중에 비슷한 상황 생기면 코드보고 어떻게 했는지 되짚어 보려고 :) 토큰재발급로그아웃

8naji.tistory.com

로그아웃에 필요한 로그아웃 코드