본문 바로가기
깃허브 링크!
node.js프로젝트(김아현,이무헌,박민우,신근호)

project day-4

json web token(JWT)을 활용한 인증 미들웨어

 

1. jsonwebtoken 모듈을 가져온다.
const jwt = require("jsonwebtoken");​

2. exports.isLogin은 isLogin 함수를 모듈로 내보내는 구문
exports.isLogin = (req, res, next) =>{​

3. req.session에서 access_token을 가져온다.

* req session은 express.js에서 세션을 관리하기 위한 객체 express.js는 기본적으로 클라이언트와 서버 간의 상태를 유지하기 위해 세션을 사용한다.(세션이란 서버 측에서 클라이언트의 상태를 저장하는 방법)

req.session은 이 세션 객체에 접근하기 위한 express.js의 속성
req.session을 사용하여 클라이언트의 세션 데이터에 접근하고 수정 가능하다. 

req.session은 세션 객체를 참조하고 acceess_token은 그 세션 객체를 할당받는 변수이다. 

const {access_token} = req.session;​

4.access_token을 JWT 토큰으로 복호화하여 확인한다.
  jwt.verify(access_token, process.env.ACCESS_TOKEN_KEY, (err, acc_decoded) =>​

 

복호화 : 암호화된 JWT  토큰을 해독하여 원래의 정보를 추출하는 과정

5. 복호화에 성공하면 req 객체에 복호화된 토큰을 저장
}else{
            req.acc_decoded = acc_decoded;​

acc_decoded는 JWT 토큰을 복호화한 결과를 담는 변수

const jwt = require("jsonwebtoken");

exports.isLogin = (req, res, next) =>{
    const {access_token} = req.session;
    console.log(access_token);

    jwt.verify(access_token, process.env.ACCESS_TOKEN_KEY,(err, acc_decoded)=>{
        if(err){
            res.send("다시 로그인 해주세요");
        }else{
            req.acc_decoded = acc_decoded;
            // 다음 미들웨어 실행
            next();
        }
    })
}​



 

오늘 해야할 것은 내가 채팅창을 생성후 채팅을 치면 mysql의 chatlog에 저장되도록 해볼것이다.  

1. mysql에 연동후 console로 잘 연결되었는지 확인

2. socket.io로 양방향 통신을 설정

 

 

먼저 첫번째 부터
mysql 데이터베이스에 연결하기

• node.js에서 mysql을 사용하기 위해 mysql2 패키지 설치

• mysql 데이터베이스에 연결하기 위한 필요한 정보(호스트,사용자명,비밀번호,데이터베이스 등)을 설정한다.
const mysql = require('mysql2');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'your_username',
  password: 'your_password',
  database: 'your_database',
});​

 


→ 하지만 sequelize를 설정하면 할 필요가없다.
(요약하자면 mysql.createConnection() 함수를 직접 사용하여 mysql 데이터베이스에 연결할 필요가 없다.)

sequellize는 node.js에서 mysql과 같은 데이터베이스와 상호작용하기 위한 orm(object-relational mapping) 라이브러리 이다.
sequelize를 사용하면 .env 파일에 설정한 환경 변수를 통해 데이터베이스 연결 정보를 설정하고 모델 정의를 통해 테이블을 생성 가능하다. 

sequelize의 seqeulize.sync() 메서드는 모델을 기반으로 데이터베이스에 테이블을 생성하거나 동기화하는 기능을 제공한다. 이 메서드를 사용하면 개발자가 직접 데이터베이스에 접속하거나 테이블을 생성할 필요가 없다.
sequelize는 모델 정의와 설정된 연결 정보를 기반으로 데이터베이스 작업을 처리한다.
sequelize
  .sync({ force: false })
  .then(() => {
    console.log("연결 성공~");
  })
  .catch((err) => {
    console.log(err);
  });​

• 이제 env 파일을 사용하여 환경 변수를 설정
→ 프로젝트 루트 디렉토리에 .env 파일을 생성한다.
.env 파일에 환경 변수를 설정한다. 각 환경 변수는 KEY=VALUE 형식으로 작성하며 여러 개의 환경 변수를 설정 가능하다.

DB_HOST=localhost
DB_USER=username
DB_PASSWORD=password
DB_DATABASE=mydatabase​

•  env 파일에서 환경 변수 로드 
require('dotenv').config();​

•  env 생성후에 mysql의 스키마도 생성되었으면 이제 mysql이 잘 연동되었는지 확인해보자
터미널 창에서 

mysql -u [사용자이름] -p​

• app.js 가 백엔드 폴더안에 있으니까  터미널 창에서 cd /BackEnd 입력후 node app.js 입력하면 연결 성공~이 뜬다.