• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

passport/index.js로 이동

21.02.17 17:24 작성 조회수 175

0

router.post('/login', isNotLoggedIn, (req, res, next) => {
//미들웨어 안에 미들웨어
//두번재 인자는 done이 전달해줌
passport.authenticate('local', (authError, user, info) => {
if (authError){ //없는 email일 경우
console.error(authError);
return next(authError);
}
if(!user){ //비번틀린경우
return res.redirect(`/?loginError=${info.message}`);
}
return req.login(user, (loginError) => { //passport index.js 로간다
if(loginError) {
console.error(loginError);
return next(loginError);
}
//세션 쿠키를 브라우저로 보내준다 -> 로그인된 상태
return res.redirect('/'); //로그인 성공
});
}) (req, res, next); //미들웨어 안에 미들웨어에는 끝날때 (req, res, next)붙입니다.

});

여기서 passport.authenticate('local'...) 을 하거나 req.login을 할때 어떤 이유로 passport/ index.js로 가서 찾는것인가요?

auth.js에는 passport에서 import 해준것이 아무것도 없는데 알아서 찾아가는 것이 궁금합니다

그리고 항상 그럼 폴더이름을 passport 로 파일은 index.js 로 해줘야 하는건가요?

답변 4

·

답변을 작성해보세요.

0

tnwjdrms님의 프로필

tnwjdrms

질문자

2021.02.18

authError가 done의 첫번째 오류라면 제가 저기서 //없는 email일 경우라고 주석을 잘못달았나 보네요.. 그럼 없는 회원이거나 비밀버호가 틀리면 다 여기에 걸리는 거네요?

답변 감사드립니다~😁

if(!user){ //비번틀린경우
return res.redirect(`/?loginError=${info.message}`);
}

0

null 자리는 서버 오류 맞습니다.

logInError는 done은 첫 번째 인자 null 포함해서 req.logIn 중 발생한 오류 모두 포함합니다.

authError는 강좌에서 설명드렸습니다. strategy의 done에 들어가는 세 개가 각각 authError, user, info입니다.

0

tnwjdrms님의 프로필

tnwjdrms

질문자

2021.02.18

답변너무감사합니다 답변보고 다시한번 천천히 과정을 복습하면서 많이 이해가 됐어요~

두개더 질문이 있습니다!

passport.serializeUser((user, done) => {
done(null, user.id); // 세션에 user의 id만 저장
});

여기서 done(null, user.id) 에서 null도 서버오류를 말하는건가요??

그리고 done을 만나 다시 (loginError) => { }이부분이 실행될때 저 loginError는 done의 첫전째인자인 null을 받는것 인가요 아니면 전체적인 이과정전에 발생한 오류가 있다면 받는것인가요?

return req.login(user, (loginError) => { //passport index.js 로간다
if(loginError) {
console.error(loginError);
return next(loginError);
}

두번째 질문은 이와 같은 맥락으로 여기서 authError은 어떤것을 받는건가요? 

passport.authenticate('local', (authError, user, info) => {
if (authError){ //없는 email일 경우
console.error(authError);
return next(authError);

0

passport.use 할 때 localStrategy가 'local'이름으로 저장됩니다. req.login을 하면 serializeUser가 실행되게 등록되어 있고요.

폴더이름, 파일명이랑 상관 없습니다. 함수를 등록한 게 중요한 것이죠.