본문 바로가기
카테고리 없음

Express(Node.js) passport 대해서

by 별빛과하엘 2020. 11. 16.

Passport

Passport는 영어 뜻으로도 여권이라는 의미인데, 모두 아시다시피 해외여행을 가기위한 신원을 확인해주는 물건입니다. Passport라는 이름을 사용한 이유가 서버속에도 여권처럼 인증을 해준다는 의미로 사용됩니다.

이처럼 Passport는 여러가지 인증처리를 구현을 쉽게 도와줍니다. (세션, 카카오, 페이스북, JWT...) 

소스예제를 통해서 Passport를 나머지 설명해드리겠습니다.

 

-사용환경-

프레임워크: Express

언어: Node.js(Javascript)

 

우선 Passport를 사용하기위해서는 passport라이브러리를 설치를 해줘야됩니다.

www.npmjs.com/package/passport

 

passport

Simple, unobtrusive authentication for Node.js.

www.npmjs.com

그리고 나서 아까전에 이야기했던 여러가지 인증 방법중에서 세션을 이용한 로그인 구현방식을 선택을 하겠습니다.

이부분도 물론 설치를 해줘야됩니다.

www.npmjs.com/package/passport-local

 

passport-local

Local username and password authentication strategy for Passport.

www.npmjs.com

설치가 완료가 되었다면, javascript를 이용해서 passport환경설정을 해주는 소스를 작성해줍니다.

//  /passport.js
import { Strategy } from "passport-local";
//fake data

const passportConfig = passport => {
  console.log("passportConfig");

  passport.serializeUser((user, done) => {
    console.log("serializeUser");
    done(null, user);
  });

  passport.deserializeUser((user, done) => {
    console.log("deserializeUser");
    done(null, user);
  });

  passport.use(
    new Strategy(
      {
        usernameField: "username",
        passwordField: "password",
        session: true,
        passReqToCallback: false,
      },
      function (username, password, done) {
        console.log("start");
        try {
          if (username) {
            //이부분에서 나중에 username데이터가 DB에 들어가있는지 또는 검증이되는 username인지 체크하는 로직이 필요합니다.
            return done(null, {
              user_id: username,
              password,
            });
          } else {
            return done(false, null);
          }
        } catch (error) {
          return done(false, null);
        }
      }
    )
  );
};
export default passportConfig;

이부분은 passport.authenticate() 미들웨어가 실행되는 순간 이쪽으로 한번더 실행을 해줍니다.

여기에서 가장 중요하게 봐야 될 부분입니다.

 

function (usernamepassworddone) {...이부분}

옵션에서도 verify: VerifyFunction 라고 뜨는데, 폼 필드에서 username, password 데이터를 사용해 아이디가 유효한지 검증을 도와주는 function입니다.

확인되었다면 done(null, user)함수를 통해서 검증을 성공시키면 serializeUser부분으로 데이터(user)를 넘겨줍니다.

 

serializeUser

function(user,done) 이용해서 session 저장할 정보를 done(null,user) 같이 두번째 인자로 넘기면 된다

 

deserializeUser

session 저장된 값을 이용해서, 사용자 Profile 찾은 , HTTP Request로  리턴한다.

 

usernameField, passwordField

폼 필드에서 아이디와 비밀번호적혀있는 name을 무엇을 받을지 설정하는 옵션입니다.(밑에사진 참고)

pug file이라서 기본 html문법이랑 다르지만 구조는 똑같습니다.

정리가 아직은 미흡하지만, 나중에 보완을 하겠습니다.

예제소스는 밑에 있습니다 참고하시면 되겠습니다.

github.com/YunInSoo/PassportExpress

 

YunInSoo/PassportExpress

Express 에서 PassportJS 설정하기. Contribute to YunInSoo/PassportExpress development by creating an account on GitHub.

github.com