[NodeJS] passport-local

오홍석·2022년 12월 15일
0

passport란?

Passport는 이름 그대로 서비스를 사용할 수 있게끔 해주는 여권 같은 역할을 하는 모듈이다.
회원가입과 로그인은 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복잡한 작업이 많으므로 검증된 모듈을 사용하는 것이 좋다.

그런 방면에서, Passport는 사용하기 좋은 검증된 모듈이다.
예를들자면, 여권이라는 것은 입/출국 심사시에 해당 여권 소지자가 입/출국 자격에 대해 인증하는 역할을 한다.
이를 서버에 비교해보면, 클라이언트가 서버에 요청할 자격이 있는지 인증할 때에 passport 미들웨어를 사용하는 것이다.
요즘에는 서비스에 로그인할 때 아이디와 비밀번호 이외에 구글, 페이스북, 카카오 같은 기존의 SNS 서비스 계정을 이용하여 로그인 하는데, passport모듈이 바로 여기에 사용되는 것이다.
정리하자면, passport모듈은 로그인 절차를 확실하게 하기위해 사용하는 라이브러리 인 셈이다.

passport-local

passport 모듈의 전략 중 하나인데, Local Strategy를 사용하며 로컬 DB에서 로그인 인증을 하는 방식이다.

코드

const passportConfig = {
  usernameField: "email",
  passwordField: "password",
  session: false,
};

const passportVerify = async (email: string, password: string, done: any) => {
  try {
    const user = await DB.getRepository(User).findOneBy({ email: email });

    if (!user) {
      console.log("존재하지 않는 사용자");
      done(null, false, { reason: "존재하지 않는 사용자입니다." });
    } else {
      if (!user.password) {
        return;
      }
      const result = await bcrypt.compare(password, user.password);

      if (!result) {
        console.log("올바르지 않은 비밀번호");
        done(null, false, { reason: "올바르지 않은 비밀번호 입니다." });
      } else done(null, user);
    }
  } catch (error) {
    console.error(error);
    done(error);
  }

위의 코드는 Local Strategy 전략을 구성하는 코드이다.
실행의 순서 다음과 같다.
1. 라우터를 통해서 로그인 요청
2. 미들웨어를 거쳐, passport.authenticate() 실행
3. authenticate에서 Local Strategy 실행
4. Local Strategy 실행하여 done() 호출시, 라우터로 돌아와 다음 미들웨어 실행
이 실행 순서를 통해서 local 전략이 실행되어지고 done()을 토대로 넘겨진 정보를 활용하여 JWT를 생성하여 반환하는 과정을 거친다.

profile
기동코딩

0개의 댓글