Passport를 이용한 로그인 구현

로그인 구현은 너무너무너무너무 힘든 일입니다.

메인기능들의 시작점이기도 하며, 정보가 오고가기때문에 보안도 중요하기 때문이죠.

그런 어려운 로그인을 그나마! 쉽게?! 만들어주는 passport를 통해 로그인을 구현해보도록 해요.

그래도 복잡하긴 복잡합니다..

라우터 셋팅

일단 POST/user/login URI를 통해 router로 받아줄 것입니다.

router.post('/login',(req,res,next)=>{
    //일단 이렇게만 만들어 놓으세요
})

passport

passport와 passport-local을 설치해주세요

그뒤 root디렉토리에 passport폴더를 만든뒤, index.js ,local.js를 만들어주세요

  • index.js - passport설정

  • local.js - 로그인 전략 설정

index.js

세션에 모든 정보를 들고있기에는 무겁기 때문에 id만 가지고 있다가 db에 요청해서 정보를 가져와야 하는데 지금은 일단 틀만을 만들어 줄 것입니다.

passport안에서는 done()을 next()와 같이 사용한다는 것 알아두세요

local.js

!!주석을 잘 읽어주세요!!

쿠키 & 세션

쿠키와 세션을 관리해주기 위해 cookie-parser와, express-session을 설치해 주세요

그리고 app.js에서 셋팅을 해줍니다. (passport도 함께 불러와요)

process.env.COOKIE_SECRET은 비밀키이기 때문에 .env에서 가져온 것입니다.

.env도 설정해주세요

이제 passport/index.js만 설정해주면 됩니다.

  • 프론트에서 서버로는 cookie만 보냅니다. (이상한 문자로)

  • 서버가 쿠키파서,익스프레스 세션으로 쿠키 검사후에 id:1을 발견하면

  • id:1이 deserializeUser에 들어가서

  • req.user로 사용자 정보가 들어가게 됩니다.

  • 즉 요청 보낼때마다 deserizlizeUser가 실행(db요청1번씩 실행)

  • 실무에서는 desezializeUser결과물을 캐싱합니다.

아 마지막으로 router도 설정을 해주어야 겠네요

router에서 정보 전달

미들웨어안에 미들웨어가 들어가기 때문에 미들웨어확장을해주어야 합니다.

자 지금까지 하면 로그인은 구현이 되지만, User모델에 있는 정보 즉,

email,nickname,password가 모두 보내지게 됩니다.

필요한 정보는 추가해주고, password를 없애보도록 할까요?

Last updated

Was this helpful?