Passport
Passport 모듈은 이름 그대로 우리의 서비스를 사용할 수 있게 해주는 여권 같은 역할을 하는 모듈다.
회원 가입과 로그인을 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복작한 작업을 Passport 모듈이 대신 해준다. Passposrt를 사용해 구글, 페이스북, 카카오톡 같은 기존으 SNS 계정으로 로그인할 수도 있다. Passport는 다양한 인증방식을 전략(Strategy)이라는 플러인을 제공한다.
Passport 개념
전략 (Strategy)
인증로직을 담당하며, 다양한 인증 방식을 구현하기 위해 사용한다.
- `passport-local`: 이메일/비밀번호 기반 인증
- `passport-kakao`: 카카오 인증
- `passport-jwt`: JWT 토큰 기반 인증
serializeUser / deserializeUser
인증이 성공하면 Passport는 사용자 정보를 세션에 저장한다.
- `serializeUser`: 인증된 사용자의 정보를 세션에 저장
- `deserializeUser`: 저장된 세션 정보를 이용해 사용자를 복원
`passport.authenticate()` 미들웨어
특정 전략을 사용해 인증 과정을 실행한다.
- 로컬 로그인 시: `passport.authenticate('local')` 호출
- 카카오 로그인 시: `passport.authenticate('kakao')` 호출
Passport의 기본 흐름
- 사용자가 로그인 요청을 보낸다
- Passport의 `authenticate()` 미들웨어가 요청을 처리한다.
- 인증이 성공하면 `serializeUser`를 호출해 세션에 사용자 정보를 저장한다.
- 이후 사용자가 보호된 리소스에 접근하면 `deserializeUser`를 통해 세션에서 사용자 정보를 가져온다.
- 인증되지 않은 사용자는 인증 페이지로 리다이렉트 된다.
Passport LocalStrategy 로그인 예시
- `/auth/login` 라우터를 통해 로그인 요청이 들어옴
- 라우터에서 `passport.authencate` 메서드 호출
- 로그인 전략 (`LocalStrategy`) 수행
- 로그인 성공 시 사용자 정보 객체와 함께 `req.login` 호출
- `req.login` 메서드가 `passport.serializeUser` 호출
- `req.session`에 사용자 아이디만 저장해서 세션 생성
- `express-session`에 설정한 대로 브라우저에 `connect.sid` 세션 쿠키 전송
- 로그인 완료
0. Passport 설치
npm i passport passprot-local passport-kakao bcrypt
1.`/auth/login` 라우터를 통해 로그인 요청이 들어옴
2. 라우터에서 `passport.authencate` 메서드 호출
3. 로그인 전략(`LocalStrategy`) 수행
- `done(error, user, info)` 함수로 `passport.authenticate` 두번째 인자 콜백함수에 인수를 넣어줌
4. 로그인 성공 시 사용자 정보 객체와 함께 `req.login` 호출
5. `req.login` 메서드가 `passport.serialzieUser` 호출
6. `req.session`에 사용자 아이디만 저장해서 세션 생성
- `passports.serializeUser` 함수에서 `done` 함수 실행시 `req.user`에 `user.id`를 저장 후 `passports.deserializeUser`로 이동
7. `express-session`에 설정한 대로 브라우저에 `connect.sid` 세션 쿠키 전송
8. 로그인 완료
- `passport.deserializeUser`에서 `done`함수를 호출해 `req.login` 미들웨어로 돌아감
- 로그인 성공시 `res.redirect("/")`로 리다이렉트 응답을 하면 브라우저로 `connect.sid`라는 이름이로 세션 쿠기 전송
참고
Node.js 교과서 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지 강의 | 제로초(조현영) - 인프런
제로초(조현영) | 노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 클라우드에 서
www.inflearn.com
[NODE] 📚 Passport 모듈 사용법 (그림으로 처리 과정 💯 이해하기)
Passport 모듈 Passport는 이름 그대로 서비스를 사용할 수 있게끔 해주는 여권 같은 역할을 하는 모듈이다. 회원가입과 로그인은 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복잡한 작업이 많으
inpa.tistory.com
'Node.js' 카테고리의 다른 글
[Node.js 교과서] 섹션 10 - 웹 API 서버 만들기 (0) | 2024.11.22 |
---|---|
[error] Sequelize A is not associated to B (1) | 2024.11.19 |
JS로 차트 훼손 없이 엑셀 수정하기!!! (1) | 2024.11.16 |
[Node.js 교과서] 섹션 8 - 몽고디비 (0) | 2024.11.11 |
[Node.js 교과서] 섹션7 - MySQL (3) | 2024.11.09 |