관리 메뉴

나의 개발일지(김지헌)

항해 99 38일차 10/26일 본문

항해 99

항해 99 38일차 10/26일

코딩이좋아요 2022. 10. 27. 02:23

어제 리프레쉬 토큰과 에쎼스 토큰을 하나하나 뜯으면서 미들웨어 작업을 끝 마쳤다.

  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