나의 개발일지(김지헌)
항해 99 38일차 10/26일 본문
어제 리프레쉬 토큰과 에쎼스 토큰을 하나하나 뜯으면서 미들웨어 작업을 끝 마쳤다.
module.exports = async (req, res, next) => {
//쿠키로 받아온다.
let userId
const accessToken = req.cookies.AccessToken
const refreshToken = req.cookies.RefreshToken
//토큰이 없다면~
if (!accessToken) return res.status(400).json({ "message": "Access Token이 존재하지 않습니다." });
//리프레쉬 토큰 확인하기
if (!refreshToken) return res.status(400).json({ "message": "RefreshToken이 존재하지 않습니다." });
//에쎄스 토큰 검증하기
const decodeAccessToken = await LoginSevice.validateAccessToken(accessToken)
//리프레쉬 토큰 검증(시크릿 키가 같은지)
const decodeRefreshToken = await LoginSevice.validateRefreshToken(refreshToken)
//검증해서 아이디값 가져오기
userId = decodeRefreshToken.userId
//인증된 에쎄스 토큰이 없을시
if(decodeAccessToken == null){
//에쎼쓰 토큰 안에 있는 유저정보로 디비에 저장된 유저정보 찾기
const findUser = await User.findByPk(userId)
//디비에서 찾아온 리프레쉬 토큰 복호화(내가 가지고 있는 리프레쉬(암호화전) 토큰이랑 디비에 저장되어있는거랑 같은지)
const decodeRefreshToken = bcrypt.compareSync(refreshToken,findUser.RefreshToken)
//위변조가 있거나 존재 하지 않을때 라고 가정했을때 예외 처리
if(decodeRefreshToken == false){return res.status(400).json({ "message": "RefreshToken이 일치하지 않거나 만료 되었습니다." })}
//리프레쉬 정상에 AccessToken 만료시 재발급
const AccessToken = await LoginSevice.createAccessTokenRe(userId)
//쿠키로 보내줌
res.cookie('AccessToken',AccessToken)
console.log("쿠키에 보내줬어요")
//프론트에서 로컬 스토리지에 저장하기 위해 res에 보내줌
//리프레쉬 토큰이 만료시
}
//유저정보를 찾아서 로컬스에 저장
User.findByPk(userId).then((user) => {
res.locals.user = user;//res.locals.user데이터를 담는다 가상공간에
next()
})
}
'항해 99' 카테고리의 다른 글
항해 99 40일차 10/28일 (0) | 2022.10.29 |
---|---|
항해 99 39일차 10/27일 (0) | 2022.10.27 |
항해 99 37일차 10/25일 (0) | 2022.10.26 |
항해 99 36일차 10/24일 (0) | 2022.10.25 |
항해 99 35일차 10/23일 (0) | 2022.10.23 |