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

dhj100님의 프로필 이미지
dhj100

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

passport-local 확장에 대해서

작성

·

197

0

안녕하세요, 제로초님.

 

노드교과서 들으며 이것저것 수정해보다가 질문이 있어 질문을 남깁니다.

강의에서 passport를 사용하여 localStartegy를 구성하실때에는 db Model이 User 1개였는데, 

Model을 2개로 늘리면(2개로 늘리려는 이유는 구인구직 사이트에서 구직자/사업자 이렇게 나뉘어 로그인을 하는것을 봐서 적용해보려고 합니다.) passport index.js를 어떻게 작성해야할지 모르겠어서 도움을 부탁드려요!

지금 저는 Model을 JobSeeker로 구현을 해놓았는데, 추가로 Model 1개 더 작성하고자 합니다.

Db 2개를 한개로 합쳐서 Db안에서 구분을 하는게 효율적일지, passport에서 Model 1개 더 추가 가능한지 감이 안와서

질문드립니다.

<<passport/index.js deserialize 부분>>

passport.deserializeUser((id, done) => {
JobSeeker.findOne({ where: { id } })
.then((user) => {
// console.log("kk", user);
done(null, user);
})
.catch((err) => done(err));

});

답변 1

0

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

궁금한 게 구직자/구인자 로그인을 하나의 라우터에서 동시에 처리하려고 하시는 건가요? 보통은 두 개의 라우터에서 처리하는 게 일반적이고, 그럴 경우 local 전략을 여러 개 넣으면 됩니다.

passport.authenticate('local.jobseeker')
passport.authenticate('local.peopleseeker')

이런 식으로 하고 use 부분도 두 개 등록하면 됩니다.

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

우선 라우터는 2개로 나누어서 진행을 하려고 합니다.

joobSeekerRouter.post("/login")

peopleSeekerRouter.post("/login")

authenticate, use 부분은 Strategy를 local 2개 구분하여 만드려고 합니다.

그런데 index.js/deserialize에서 JobSeeker, PeopleSeeker를 어떻게 구분지어서 사용해야할지 모르겠더라구요

제가 올려놓은 코드에서 Jobseeker , PeopleSeeker 2개를 구분하여 작성하는 방법이 궁금합니다.

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

serializeUser에서 done(null, user.id) 이런 식으로 하시는 건가요?

serializeUser에서부터 수정되어야 합니다. done(null, { type: 'jobSeeker', id: user.id });

이런 식으로 객체를 넣으면 deserializeUser에서도 ({ type, id }, done) => {...} 이렇게 받을 수 있어서 구분하기 편할겁니다.

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

아 그럼 type으로 분기처리를 하면 되겠네요!! 

그러면 serializeUser에서 type은 어디서 설정을 해야 할까요??

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

type은 serializeUser 안에서 찾아서 넣으셔야겠죠.

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

감사합니다. 알려주신대로 코드 적용했는데, 잘 구분되네요!! 

dhj100님의 프로필 이미지
dhj100

작성한 질문수

질문하기