• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

passport.serializeUser에 대해서 질문드립니다.

22.01.29 16:42 작성 조회수 252

0

serializeUser함수가 로그인을 수행 할 시 세션에 어떤 데이터를 저장할지 정해주는 메서드라고 하였습니다. 그런데 이 동작을 done(null, user.id)가 수행해주는 것인가요? done(매개변수, 매개변수)은 passport.authenticate 혹은 req.login의 리턴주소 가는것이 아닌가요?? 그리고 로그인 라우터에 (req, res, next)를 붙이는게 기존의 미들웨어를 확장하는 형식이라고 하셨는데 혹시 done()의 실행방식과 관련이 있는건가요?

질문을 요약하면,

1. passport.serializeUser에서 세션의 데이터를 저장하는 방식이 궁금합니다.

2. 로그인라우터에 (req, res, next)가 붙는게 done과 관련이 있는지 궁금합니다.

3. done()이 호출된 지점으로 돌아가는 리턴과 역할이 같은지 궁금합니다.

4 . res.redirect(매개변수)에서 매개변수로 url이 들어가면 그 주소로 이동 되는건 알겠는데

이 메서드가 어떻게 쿠키까지 브라우저로 보내는지 궁금합니다.

답변 1

답변을 작성해보세요.

1

1. passport.authenticate로 가는 done은 localStrategy의 done입니다. serializeUser의 done은 done의 두 번째 인수로 넣은 값(보통 유저의 아이디)이 세션에 저장되는 겁니다.

2. 관련 없습니다. (req, res, next)를 붙이는 것은 passport.authenticate 미들웨어를 호출하기 위함입니다.

3. 용어를 정확히 쓰셔야 합니다. done은 리턴이 아니라 콜백함수입니다. 호출한 곳으로 돌아가는 용도가 맞습니다.

이승훈님의 프로필

이승훈

질문자

2022.01.29

1번 답변에서 하신 말씀이 오로지 passport.serialize((user, done))에서의 done()만이(passport.authenticate를 제외한 done()) done(null, user.id)에서 두 번째 매개변수인 user.is를 세션에 저장한다는 뜻인가요? 그리고 res.redirect(매개변수)에서 매개변수를 url로 주는데 이 외에 다른 매개변수 없이 어떻게 세션 쿠키까지 브라우저로 보내지는지 여쭤봐도될까요?

네 user.id가 세션에 저장되는 것이고요. res.redirect(인수)입니다. 매개변수가 아닙니다. 세션쿠키는 req.login을 할 때 내부적으로 세션쿠키가 설정이 됩니다.

이승훈님의 프로필

이승훈

질문자

2022.01.30

감사합니다!