Skip to content

GitHub 소셜 로그인

jch422 edited this page Oct 31, 2020 · 2 revisions

설치하는 패키지

npm i passport passport-github passport-jwt jsonwebtoken

기본 설정

  • server/src/loaders/index.js

    • app.use(passport.initialize())
    • 요청(req 객체)에 passport 설정을 심는다.
    • session을 사용하지 않고 jwt를 사용할 것이기 때문에, app.use(passport.session())는 생략.
  • server/src/passport/index.js

    • Passport는 로그인 시의 동작을 strategy 라는 용어로 표현.
    • local 전략, GitHub 전략, Kakao 전략 등 여러 passport-strategy를 한데모아 관리.

흐름

  1. 라우터를 통해 로그인 요청이 들어옴
  2. 라우터에서 passport.authenticate('github') 호출
  3. github-strategy 수행
  4. done 콜백 호출(두 번째 인수로 주로 사용자 정보를 넣는다)
    • done(null, user) => 로그인 성공
    • 두 번째 인수를 사용 X( ex. done(null, false) ) => 로그인 실패
    • 첫 번째 인수를 사용 O( ex. done(error) ) => 서버 에러
  5. (성공적으로 done 콜백 호출시) passport.authenticate 의 콜백 함수에서 나머지 로직이 실행된다
    • 이 부분에서 snsId와 provider를 payload로 하는 jwt 토큰을 생성하고 client로 전송.
  6. client에서는 jwt를 storage에 저장

로그인 이후

  • 서버로 api 요청시 storage에 저장하고 있던 jwt를 req.header에 넣어서 요청
  • server에서는 passport-jwt 를 통해 설정한 jwt-strategy를 사용하여 token 유효성 검사

간단한 테스트

image

  • 성공적으로 로그인 후에 client에는 json 반환

image

  • jwt.io에서 decode 하여 확인하면

image

  • Postman을 이용한 로그아웃 테스트
    • Authorization -> Bearer 토큰을 넣어준다

image

image

  • 토큰 없이 logout 요청 시 => unauthorized

image

Overview

🏠Home

📖 Api docs

😄일일 회의록
😠일일 회고
😢주간 회고
👼데일리 스크럼
☔데모
🍵피어세션
📖 학습공유
🔥 Trouble Shooting
🍰 우리의 코드 돌아보기
Clone this wiki locally