김데이의 개발공부

[ TIL ] Day 42 - PASSPORT (node.js) 기본 문법(세션, 토큰) 본문

코드잇 Node.js(BE) 부트 캠프/TIL (Today I Learn) 📑

[ TIL ] Day 42 - PASSPORT (node.js) 기본 문법(세션, 토큰)

theday365 2025. 11. 24. 18:44
반응형

🗓️ 수업 일자 : 2025.11.24

✨ 오늘의 수업 평가 :  [ HARD ] 지식 폭풍에 휩쓸렸다 🤪🌪️📖

 

수업 끝나고 열심히 복습 해 왔음에도 불구하고 

Passport 모듈로 인증 작업을 새로 시작하니, 아무것도 모르겠.. 완전 생초보로 시작하는 이 기분😵‍💫

확장성이 좋아서 사용한다고 하는데.. 확장을 안하고 싶은 심정..ㅋㅋㅋㅋㅋㅋ

오늘 OAuth 활용까지 배웠는데, 세션 / 토큰 영역 따라가기도 벅차다.. 🤪

 

📝  오늘 배운 내용  

- PASSPORT 모듈 설명

- Passport 기본 문법 - 세션 & 토큰 


0. 세션, 토큰 복습

- Bcrypt 작업은 사용자의 비밀번호를 해싱하는 작업으로 CPU 리소스를 쓰는 작업
    ⇒ 오래 걸리는 계산 작업이므로 꼭 async & await을 사용하여 비동기로 진행

- 유저의 인증(순수 기능) 작업 : 로그인, 로그아웃 작업에서 세션 또는 토큰의 생성/삭제 작업이 진행  

- 서비스 내에서 사용되는 유저 인가 작업 : CRUD 중에서 CUD 작업에서 세션 또는 토큰 정보가 들어간 쿠키 사용, 미들웨어에서 전달 받은 세션 또는 토큰의 정보가 올바른 정보인지 검증 후 서비스 제공

 

 

 

1. PASSPORT 모듈 설명

기본 설명

- Node.js에서 사용하는 모듈로, 사용자 인증을 간단하게 도와주며 미들 웨어로 사용

- Passport에서는 거의 대부분의 OAuth 구현이 가능하고, strategy(전략)로 제공함

공식 홈페이지 : https://www.passportjs.org/

 

 

Passport.js

Simple, unobtrusive authentication for Node.js

www.passportjs.org

Passport 에서 제공하는 OAuth 확인하기 → Strategies(전략) 을 등록해서 사용
Passport 에서 제공하는 OAuth 확인하기 → Strategies(전략) 을 등록해서 사용

 

strategy

  • 로그인을 어떤 방식으로 처리할지 정하는 플러그인 같은 모듈
  • 로그인 방식을 하나씩 담당하는 Passport부품같은 존재
  • google, kakao, Naver등 OAuth 별로 모듈이 존재함
// Strategy 예시 - Google 

import { Strategy as GoogleStrategy } from 'passport-google-oauth20';
import { GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET } from '../constants.js';
import prisma from '../prisma.js';

export const googleStrategy = new GoogleStrategy({...},async function(..){...});

 

 

Passport-local

  • DB에 있는 아이디/비번 기반의 로그인을 위한 완전 기본이 되는 Stratege 제공 패키지
  • localStrategy 구문을 통해 로그인 정보를 확인하여 검사(id 유무, 패스워드 유효) 한 뒤 로그인을 허용
  • done() : localStrategy 결과를 passport에게 전달하는 콜백 함수
    • done(error, user) : error가 있으면 서버 오류로 인증 과정 자체가 실패
    • done(null,false) : 아이디 없음, 비번 틀림, 로그인 실패에 사용하는 값으로,
                                  해당 함수가 요청되면 passport가 401 처리를 진행
    • done(null, user) : 로그인 성공 시 사용하는 콜백함수
import { Strategy as LocalStrategy } from 'passport-local';
import bcrypt from 'bcrypt';
import prisma from '../prisma.js';

export default new LocalStrategy(
  { usernameField: 'username', passwordField: 'password' },
  async (username, password, done) => {
    try {
      const user = await prisma.user.findUnique({ where: { username } });
      if (!user) return done(null, false);

      const isValid = await bcrypt.compare(password, user.password);
      if (!isValid) return done(null, false);

      return done(null, user); // 성공
    } catch (err) {
      return done(err); // 에러
    }
  }
);

 

 

 

2. Passport 기본 문법 - 세션 & 토큰

Passport 문법 익히기

  • 기본 제공 문법 
    • passport.initialize() : Passport의 기능을 활성화 시키는 기본 미들웨어, 전역에 사용
    • passport.authenticate(localStrategy, {session: optional})
      : passport/index.js 파일 등에 passport.use() 로 등록해둔 “전용 Strategy 미들웨어”를 찾아 실행하는 역할
      세션 기반으로 운영되므로 토큰에서 사용 시 {session : false}를 인자로 함께 전달 해야함
  • 세션 관련 문법
    • passport.session() : 세션에 저장 된 userId를 자동으로 읽어와서 deserializeUser를 호출해 req.user 생성
    • passport.serializeUser( fn(user,done){..} ) : 정상적으로 인증 과정을 거치면서 user.id만 세션에 저장
    • passport.deserializeUser( fn(user,done){..} )
      : 쿠키를 통해 전달 받은 세션 ID에 저장 된 userId를 이용하여 DB에서 User 정보를 찾아서 req.user 값을 지정
  • 토큰 관련 문법 
    • passport-jwt, new JwtStrategy : Passport에게 ‘엑세스 토큰을 어떻게 읽고, 어떻게 검증할지’ 알려주는 설정

 


 

📃 내일은 뭘 배울까 🤔

- Passport 세션 / 토큰 구조화

- Passport OAuth 구현하기

반응형