나의 개발일지(김지헌)
항해 99 37일차 10/25일 본문
어제 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 |