내배캠 127일차

·2023년 3월 20일
0

내일배움캠프

목록 보기
130/142

월요일

refresh token 저장을 db -> redis

redis.js

const redis = require('redis');

const redisClient = redis.createClient({
  url: `redis://${process.env.REDIS_USERNAME}:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/0`,
  legacyMode: true, // 반드시 설정 !!
});

// 확인용
redisClient.on('connect', () => {
  console.log('Redis connected!');
});

redisClient.on('error', (err) => {
  console.log('Redis Client Error', err);
});

redisClient.connect();

module.exports = redisClient;

service파일에서 디비에 저장해주던 코드를 다음 코드로 변경

// 발급한 refresh token을 redis에 key를 user의 id로 하여 저장
redisClient.set(id, refreshToken);

미들웨어파일에서 디비에 있는 refreshToken과 비교해주는 코드 대신에 다음 코드로 변경

// redis에 저장된 refreshToken과 비교
    /* redis 모듈은 기본적으로 promise를 반환하지 않으므로,
       promisify를 이용하여 promise를 반환하게 해줍니다.*/
    const getAsync = promisify(redisClient.get).bind(redisClient);
    const redisRefresh = await getAsync(id); // refresh token 가져오기

    if (refreshToken !== redisRefresh) {
      const error = new RefreshTokenNotFound();
      res.status(401).json({ message: error.message });
      return res.render('login.html');
    }

redis 공식문서
참고 블로그1
참고 블로그2
참고 블로그3
참고 블로그4 - redis 회원가입 및 설정

profile
개발자 꿈나무

0개의 댓글