[Error] Redis TypeError: Invalid argument type

sooyoung choi·2023년 12월 14일
0

Error log

목록 보기
7/9
post-thumbnail

로그인 인증 중 accesstoken만 넣어봤어서 이번에는 refreshtoken을 넣어보려고 알아봤을때 우리의 db에 항상 token을 넣는건 아닌거 같아서 redis를 이용해 사용자의 token 값을 넣어주려고 처음 redis를 써봤는데 이 망할.. 30분은 붙잡고 있었따..

TypeError: Invalid argument type

해결방법

  • Type error 이므로 어딘가 다른 타입으로 받아오고 있었다는거였는데,
  • 전체적인 login 로직을 보면 우린 mysql을 써서 id 값 자체가 int였다.
login = async (req, res, next) => {
        try {
            const { email, password } = req.body;

            const user = await this.authService.login(email, password);

            if (!user) {
                throw error;
            }

            const secret = process.env.TOKEN_KEY;
            if (!secret) {
                return res
                    .status(500)
                    .json({ error: 'JWT secret key is missing' });
            }
            const accessToken = sign({ user }, secret);
            const refreshToken = refresh();

            redisClient.set(user.id, refreshToken);

            res.status(200).send({
                // client에게 토큰 모두를 반환합니다.
                ok: true,
                data: {
                    accessToken,
                    refreshToken,
                },
            });

            //return res.status(200).json({ message: '로그인 성공' });
        } catch (error) {
            console.log(error);
            next(error);
        }
    };
  • redisClient.set()
  • redis에서 set은 string값을 키로 갖는다 Set key to hold the string value
  • set 안에있는 파라미터 값을 string으로 바꿔주니 해결되었다.
login = async (req, res, next) => {
       ...

       		// string으로 바꿔주기!!
            redisClient.set(toString(user.id), refreshToken);

            res.status(200).send({
                // client에게 토큰 모두를 반환합니다.
                ok: true,
                data: {
                    accessToken,
                    refreshToken,
                },
            });

      ...

해결!!

깔쌈쓰ㅎㅎ

0개의 댓글