관리 메뉴

나의 개발일지(김지헌)

항해 99 37일차 10/25일 본문

항해 99

항해 99 37일차 10/25일

코딩이좋아요 2022. 10. 26. 01:02

어제 AccessToken과 RefreshToken을 가지고 로그인 기능을 구현한다고 했고 코드는 발급 까지는 완성을 했다.

강의 코드를 하나하나 뜯어서 보면서 코드를 작성하고 있다

로그인 컨트롤러 

login = async (req,res,next)=>{
  try{
    const {nickname, password} = req.body
    const RefreshToken = await this.loginsevice.createRefreshToken({nickname,password})
    const AccessToken = await this.loginsevice.createAccessToken({nickname,password})
    //AccessToken의 
  // res.cookie('AccessToken',`Bearer ${AccessToken}`) //Bearer 에쎼스 토큰
  // res.cookie('RefreshToken',`Bearer ${RefreshToken}`);  //Bearer 리프레쉬 토큰
  res.cookie('AccessToken',AccessToken) // Access Cookie에 전달한다.
  res.cookie('RefreshToken',RefreshToken);  // RefreshToken Cookie에 전달한다.
  res.status(200).send({"message": "Token이 정상적으로 발급되었습니다."})
  }catch(error) {
   next(error)
  }
  }

로그인 서비스

createRefreshToken = async ({nickname,password})=>{
  //유저정보 확인
  const user = await this.loginrepository.login({nickname})
  //암호화
  const encryptedPassword = bcrypt.compareSync(password,user.password)
  if(!user || encryptedPassword == false){
    throw new ValidationError("유저가 없거나 비밀번호가 일치하지 않습니다.")}
    const refreshToken = jwt.sign({userId : user.userId },process.env.SECRET_KEY,{ expiresIn: '7d' }) // Refresh Token이 7일 뒤에 만료되도록 설정합니다.
   //비크립트를 사용하여 암호화를 했다
   const salt = bcrypt.genSaltSync(Number(process.env.salt))
    const RefreshToken = bcrypt.hashSync(refreshToken,salt)
    //암호화한 리프레쉬 토큰을 회원가입 디비에 업데이트 하기
    await this.signuprepository.updaterefreshToken({nickname,RefreshToken})
    return RefreshToken
  }

createAccessToken = async ({nickname,password})=>{
  //유저 정보 확인
  const user = await this.loginrepository.login({nickname})
  //암호화
  const encryptedPassword = bcrypt.compareSync(password,user.password)
  if(!user || encryptedPassword == false){
    throw new ValidationError("유저가 없거나 비밀번호가 일치하지 않습니다.")}
  //에쎼쓰 토큰 발급
  const AccessToken = jwt.sign({userId : user.userId },process.env.SECRET_KEY,{ expiresIn: '7d' })
  return AccessToken
}
SignupRepository
//닉네임과 리프레쉬 토큰을 일치하는 닉네임을 찾아서 리프레쉬 토큰을 업데이트 해준다
updaterefreshToken = async({nickname,RefreshToken}) =>{
    return await User.update({RefreshToken},{where : {nickname}})

  }

미들웨어(중간까지 만 확인했습니다)

 module.exports = async (req, res, next) => {
    //쿠키로 받아온다.
    
    const accessToken = req.cookies.AccessToken
    const refreshToken = req.cookies.RefreshToken //암호화
    console.log(accessToken,"111111111111",refreshToken)
    
    // if (!refreshToken) return res.status(400).json({ "message": "Refresh Token이 존재하지 않습니다." });
    // if (!accessToken) return res.status(400).json({ "message": "Access Token이 존재하지 않습니다." });
    
    //테스트에 있는 유저아이로 찾아오기
    //에쎼스 토큰 검증
     const AccessToken =  jwt.verify(accessToken, process.env.SECRET_KEY); // JWT를 검증합니다.
    let userId = AccessToken.userId //userId 찾기
    const findUser = await UserRepository.findByOne(userId)
    console.log("sdafsdafsdaf122311323232312312312312312")
    console.log(findUser.RefreshToken,"리프레쉬")
    console.log(refreshToken)
    //찾아온 유저정보로 리프레쉬 복호화 하기
    const EncryptedRefreshToken = bcrypt.compareSync(refreshToken,findUser.RefreshToken) 
    console.log(EncryptedRefreshToken)
    // const RefreshToken = await this.UserRepository.login()
    //   jwt.verify(RefreshToken, process.env.SECRET_KEY); // JWT를 검증합니다.

    
    // const accessToken = res.cookies.accessToken;
    // const refreshToken = res.cookies.refreshToken;
    
    
    next()
}

'항해 99' 카테고리의 다른 글

항해 99 39일차 10/27일  (0) 2022.10.27
항해 99 38일차 10/26일  (0) 2022.10.27
항해 99 36일차 10/24일  (0) 2022.10.25
항해 99 35일차 10/23일  (0) 2022.10.23
항해 99 34일차 10/22일  (0) 2022.10.23