본문 바로가기

JavaScript

Node.js 3차 미니프로젝트 middleware, auth

728x90

Node.js 3차 미니프로젝트 middleware, auth


node.js 쿠키 가져오기

 

필요한 라이브러리 : cookie-parser

 

📄 app.js

const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

// 쿠키 가져오기
app.get('/api', function (req, res) {
  console.log(req.cookies);
})

 

📌 토큰 값이 있을 경우

{  token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOnsidXNlcklkIjo1fSwiaWF0IjoxNjcyNzA5ODA4LCJleHAiOjE2NzI3OTYyMDh9.WKlllE1RWonYxTr8ihvBVhIyAslO_Ofc_Z98VrptL78'
}

 

객체 형태로 cookie값이 들어오는 걸 확인할 수 있다.

 

📌 토큰값이 없을 경우

첫번째 cosole.log(req.cookies['token'])값이고

두번째는 console.log(req.cookies) 출력값이다.


📄 app.js

// 쿠키 가져오기
app.get('/api', function (req, res) {
  const token = req.cookies['token'];

  if(!token) {
    console.log("로그인 후 이용해 주세요!");
    return;
  }

  const { userId } = jwt.verify(token, process.env.SECRET_KEY);
  console.log(`${userId.userId} 님이 로그인 하셨습니다.`);
})

쿠키 토큰 있을 경우

 

 

쿠키 토근 없을 경우

 


middleware auth 만들기

 

📄 middlewares/auth-middleware.js

const jwt = require('jsonwebtoken');
const cookieParser = require('cookie-parser');

const { user } = require('../models/user');

const app = express();
app.use(cookieParser());

module.exports = (req, res, next) => {
    const token = req.cookies['token'];

    if(!token){
        res.status(401).send({
            errorMessage: "로그인 후 이용해 주세요."
        });

        return;
    }

    try {
        const { userId } = jwt.verify(token, process.env.SECRET_KEY);
        user.findByPk(userId).then((user) => {
            res.locals.user = user;
            next();
        });
    } catch (err) {
        res.status(401).send({
            errorMessage: "이미 로그인이 되어 있습니다."
        });
    }
};

하지만, 완전한 코드는 아니다. 테스트 해봐야 한다.

간단하게 post버튼 만든 뒤, 테스트 해볼 예정.

localStrorage에 저장되는지도 확인해봐야 한다.

 

 

📄 main.html

function logout() {
        $.removeCookie("token", { path: "/" });

        localStorage.clear();
    }

logout할 경우, localStorage를 지워주는 코드도 추가해줘야 할듯하다.