월요일
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 회원가입 및 설정