프로그래머스 풀스택 36
posted on 16 Oct 2024 under category programmers in series programmers
프로젝트: Node.js 기반의 REST API 구현(13)
💫 회원 api 검토 하면서 jwt 얘기
로그인할 때! jwt는 쿠키에 담아주기!
💫 jwt api 테스트 1탄
<POSTMAN 결과>
💫 jwt api 테스트 2탄
💫 authorization 받아보기
// GET + "/jwt/decoded" : 토큰 검증
app.get('/jwt/decoded', function (req, res) {
let receivedJwt = req.headers["authorization"]
console.log("우리가 req로 전달받은 jwt : ", receivedJwt);
var decoded = jwt.verify(receivedJwt, process.env.PRIVATE_KEY);
res.send(decoded);
});
<POSTMAN 결과>
View > Show Postman Console(ALT + CTRL + C)
💫 좋아요 추가 API에 jwt 구현
<POSTMAN 결과>
💫 좋아요 취소 API에 jwt 구현(user_id 꺼내기 모듈화)
function ensureAuthorization(req) {
let receivedJwt = req.headers["authorization"];
console.log("received jwt : ", receivedJwt);
let decodedJwt = jwt.verify(receivedJwt, process.env.PRIVATE_KEY);
console.log(decodedJwt);
return decodedJwt;
};
const removeLike = (req, res) => {
const book_id = req.params.id;
let authorization = ensureAuthorization(req);
// ...생략
};
💫 장바구니 담기
💫 조회 API jwt 구현
💫 옥의 티 잡아내기 1 : jwt expired?
💫 if/else 👉 try/catch
try…catch
<if/else문과 try/catch의 구성>
A 코드 실행
if (A에서 발생한 실수1) { try {
//A 코드 실행
} else if (A에서 발생한 실수2) { } catch (err) {
//에러 처리
} ... } ...
💫 JWT
💫 에러 객체
console.log(err.name);
console.log(err.message);
try/catch를 사용하면 코드가 종료될 때 exited with code=0
으로 되고
사용하지 않으면 exited with code=1
종료됨.
그래서 되도록 try/catch로 에러를 처리해줄 것!
💫 throw 연산자
throw 에러 객체
ex) throw new SyntaxError(메세지);
throw new SyntaxError("입력 값에 이름이 없습니다.");
💫 TokenExpiredError
function ensureAuthorization(req, res) {
try {
let receivedJwt = req.headers["authorization"];
console.log("received jwt : ", receivedJwt);
let decodedJwt = jwt.verify(receivedJwt, process.env.PRIVATE_KEY);
console.log(decodedJwt);
return decodedJwt;
} catch (err) {
console.log(err.name);
console.log(err.message);
return res.status(StatusCodes.UNAUTHORIZED).json({
"message" : "로그인 세션이 만료되었습니다. 다시 로그인 해주세요."
});
}
};
💫 res를 두번 보내면 생기는 일 - instanceOf 등장
try/catch에서 catch에 걸리면 res값이 authorization에 잘못들어가면서 values에도 영향을 미침!
res.status(StatusCodes.UNAUTHORIZED).json({
"message" : "로그인 세션이 만료되었습니다. 다시 로그인 해주세요."
});
그래서 일단 return에서 이 부분을 떼고 return err;만 함
💫 JsonWebTokenError도 컨트롤해보자!
JsonWebTokenError
invalid token
라는 오류가 발생하게 됨.
Y 일을 통해 명확히 알게 되었거나 이해한 부분(한 일)에 대해 정리 :
authorization, try/catch & 에러 객체 & throw를 통한 예외처리
W 배운 점과 시사점 :
try…catch
에러 객체
console.log(err.name);
console.log(err.message);
exited with code=0
으로 되고exited with code=1
종료됨.throw 에러 객체
ex) throw new SyntaxError(메세지);
throw new SyntaxError("입력 값에 이름이 없습니다.");
T 응용하여 배운 것을 어디에 어떻게 적용할지:
다양한 예외 처리를 통해 코드를 깔끔하게 만들 수 있음!