- 구조분해의 대상이 객체나 배열이 아닐 때 나는 에러로 undefined시에 저런 에러 문구가뜬다.
<script> //Uncought TypeError: Invalid attempt to destructure non-iterable instance </script>
- 구조분해 할당 하는 대상이 객체인지 배열🔑인지 확인하기
- undefined상태일 때 예외 처리🔑 해주기
<script> const signInUser = async (email, password) => { const [userInfo] = await signInDao.getUserInfo(email); if (userInfo === undefined) { // 이메일이 유효하지 않은 경우 const error = new Error('INVALID EMAIL'); error.message = '유효하지 않은 이메일입니다.'; error.statusCode = 403; throw error; } const validHashedPsw = await bcrypt.compare(password, userInfo.password); if (!validHashedPsw) { // 잘못된 비밀번호 경우 const error = new Error('INVALID_PASSWORD'); error.message = '잘못된 비밀번호입니다.'; error.statusCode = 403; throw error; } else { // 비밀번호 + 이메일 맞는 경우 const accessToken = jwt.sign( { id: userInfo.id }, process.env.ACCESS_TOKEN_SECRET_KEY, { expiresIn: '1h', } ); return accessToken; } }; </script>
- jwt의 sign, verfy는 인자에 따라 동기/ 비동기 처리가 다르게 동작한다는 점에 대해서
- 발급받은 jwt 저장할 수 있는 다양한 저장 공간, session/cookies 등에 대해서
- auth middleware에 대해서
- 사용자 정보를 토대로 암호화 토큰 생성하는 메서드
jwt.sign(payload, secretOrPrivateKey, [options, callback])
- payload : 객체 리터럴, 버퍼 또는 유효한 JSON을 나타내는 문자열. 유저 정보를 넣어준다.
- secretOrPrivateKey(두 번째 인자) : 비밀 키 전달
- options(세 번째 인자) : 토큰에 대한 정보를 객체로 전달
- callback(네 번째 인자) : 콜백함수 작성. 만약 콜백 함수를 작성하지 않으면 동기 처리가 된다.
- 암호화된 토큰을 해싱하여 권한을 확인하는 메서드
jwt.verify(token, secretOrPublicKey, [options, callback])
- token(첫 번째 인자) : 토큰 값을 전달해, 인증이 된 유효한 토큰인지 확인
- secretOrPublicKey(두 번째 인자) : 토큰 생성 시에 사용한 비밀 키를 디코딩에 똑같이 사용된다.
- callback(네 번째 인자) : 콜백함수 유무에 따라 비동기, 동기로 동작한다.
- 비록 밀렸지만 회고록 작성을 계속 지속하려한 점 GOOD~
- 앞으로 벡엔드하면서 더 바빠질 거 같으니 내가 만난 에러들 틈틈이 벨로그에 미리미리 기록하는 습관을 기르자!
- auth 미들웨어 만들기
- token 저장하는 방식 정해서 인가 처리 해보기
- represh token 개념 찾아보기
오늘의 명언 제가 참 좋아하는 말이네요 :)