인프런 커뮤니티 질문&답변

SILENMUS님의 프로필 이미지
SILENMUS

작성한 질문수

Node.js 교과서 - 기본부터 프로젝트 실습까지

passport serializeUser/deserializeUser

deserialize 캐싱 구현 관련 질문.

해결된 질문

작성

·

279

0

안녕하세요~

deserialize 캐싱를 구현해보았습니다.

구현 하다보니 두가지 의문이 생겨 질문합니다. 

우선 아래는 제가 구현한 코드 입니다.

let users = [ ] ;

passport.deserializeUser((id, done) => {

    let result = users.indexOf(id);

    if (result === -1) { // result가 -1이라면 === 배열에 아이디 없다.

      User.findOne({ where: { id } }) // 유저 아이디가 있는지 db에서 검색해라.
      .then((user) => done(null, user)) // 검색이 성공했다면, 결과를 파라미터에
      .then(()=>users.push(id)) // 그리고 배열에 아이디를 추가해라.
      .catch((err) => done(err));

    } else { // result가 -1이 아니라면, 배열안에 아이디가 있다. 

      done(null,users[result]);

    }

  });

테스트 해봤는데 일단은 동작이 됩니다.

제가 궁금한 것은 

1. 배열의 indexof 함수가 동기인지, 비동기인지 입니다. 

2. 유저가 로그아웃을 하거나 , 브라우저를 종료해도 

배열안에 저장한 유저 아이디는 그대로 저장되어 있는데 ,

혹시 위와 같은 상황에서 발생할 수 있는 문제점이 있을까요?

( 제 지식으로는 딱히 문제가 될 것 같지는 않은데, 강사님의 의견이 궁금합니다. ) 

답변 2

2

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

1. indexOf는 동기입니다.

2. 로그아웃 시에는 저 배열에서 find나 findIndex 메서드로 찾아서 지워주셔야 합니다. 배열은 export const로 다른 파일에서 쓸 수 있게 해주시면 됩니다. 그리고 보통 캐싱에도 유효기간은 어느 정도 주는 것이 좋습니다. 정보가 너무 오래될 수도 있으니까요.

0

SILENMUS님의 프로필 이미지
SILENMUS
질문자

감사합니다.

SILENMUS님의 프로필 이미지
SILENMUS

작성한 질문수

질문하기