201020중간발표 백엔드 파트 - Marvic1130/BlinkingRecognitionProject GitHub Wiki

백엔드 진행상황

  1. 시퀄라이즈를 사용한 DB구축
  2. 회원가입 기능 구현
  3. JWT토큰을 이용한 로그인 구현

JWT토큰을 이용한 로그인 구현

JWT선택 이유: 세션의 경우 client의 로그인 요청이 들어올 때 마다 session Id를 가지고 session db를 거쳐 사용자의 정보를 받아야 하는 번거로움이 있지만 JWT 토큰의 경우 session db를 거칠 필요 없이 토큰의 유효성 검사 만으로 사용자 인증이 가능함

module.exports.login = async (req, res) => {
  const { id, pw, name } = req.body;
  try {
    const pUserInfo = await Professor.findOne({ where: { id } }); //req.body로 받은 id와 Professor id 같은지 검사
    const sUserInfo = await Student.findOne({ where: { id } });//req.body로 받은 id와 Student id 같은지 검사

    if (sUserInfo) {
      const pwCorrect = await bcrypt.compare(pw, sUserInfo.pw);
      console.log(pwCorrect, pw, sUserInfo.pw);
      if (!pwCorrect) {
        console.log("Password is wrong!");
        res.sendStatus(400);
      } else {
        console.log(
          sUserInfo.id,
          sUserInfo.name,
          sUserInfo.college,
          sUserInfo.sNum
        );
        const accessToken = jwt.sign( //accessToken 생성
          {
            name: sUserInfo.name,
            id: sUserInfo.id,
            pw: sUserInfo.pw,
            sNum: sUserInfo.sNum,
            college: sUserInfo.college,
            department: sUserInfo.department,
          },
          process.env.ACCESS_SECRET,
          {
            expiresIn: "1m",
            issuer: "jungseok",
          }
        );
       
        const refreshToken = jwt.sign(  //refresh Token 생성
          {
            id: sUserInfo.id,
            pw: sUserInfo.pw,
            sNum: sUserInfo.sNum,
            college: sUserInfo.college,
            department: sUserInfo.department,
          },
          process.env.REFRESH_SECRET, //비밀키
          {
            expiresIn: "24h", //토큰 유효시간 설정
            issuer: "jungseok",//토큰 발급자
          }
        );
        //token 전송
        res.cookie("accessToken", accessToken), //브라우저에게 쿠키로 토큰 전송
          {
            secure: false,  //https 프로토콜을 사용할 시 true
            httpOnly: true,
          };
        res.cookie("refreshToken", refreshToken),
          {
            secure: false,
            httpOnly: true,
          };

        res.status(200).json("login success"); 
        console.log("Student Login");
      }

<Postman을 사용해 login 라우터에 id와 pw 보내 로그인 실행> 포스트맨 로그인

<로그인 성공 accessToken, refreshToken생성>

성공 postmanToken

<로그인된 User정보 확인>

vslogin