22.12.22 jwt,

Han Lee·2022년 12월 22일
0

TIL

목록 보기
20/43

JWT와 세션, 토큰

  • 인증 Authentication - 로그인 : 특정 권한을 가진 사용자 임을 아이디랑 패스워드등을 통해 인증을 받는것
  • 인가 Authorization - 인증을 하고 나서 인증을 받은 계정으로만 활동을 할때 로그인이 되어있음을 알아보고 허가를 해주는것 : 로그인이 되고 하는 일

JWT = 인가 Authorization 에 관련 기술

토큰 - 로그인하면 토큰을 브라우저에 전달 : 서버에는 저장 없음

  • 헤더 : 타입 = 언제나 jwt가 들어감 alg:알고리즘 서명값을 만드는데 사용된 알고리즘
  • 페이로드 : 정보를 담음 : 정보=claim
  • 서명값 : 헤더,페이로드,서버에 감춘 비밀값 을 넣고 알고리즘 돌려 나온 값

sequelize migration

  • 수정하고 싶은 모델을 소스코드에 작성해 수정할 수 있다? : 운영주인 서버에서 DB변경 작업을 해주는 ex) 모델의 데이터 형식, 컬럼 추가, 테이블 추가등
    -> 디비버로 직접 지우는거와 같은거 같음
npx sequelize migration:create --name add 
// add라는 이름으로 migration파일이 생성

model을 먼저 수정하고 진행해야 한다. -> 하나의 파일을 수정하면서 쓰지 않고 변경이 생길 때 마다 새로 생성해야 한다.

up은 새로 생성되는것 , down은 삭제, 되돌리는 것들을 넣는다. async로 되어있어서 await을 넣어주자. -> 강의자료에서는 안넣어주는데...

sequelize db:migrate
//마이그레이션 디비에 적용

시간이 한국시간이 아니다.

  • config.json에서 timezone을 "timezone": "Asia/Seoul"로 하고 db에 저장이 잘되서 해결된줄 알았는데 get으로 불러와본것을 보니 시간이 다르다.
  • 구글링 해보니 로드 할때 날짜를 string으로 받아서 -9 할 수 없개 한다는데...
    -> models/index.js에서 수정을 해야 한다고 한다.

게시물과 댓글을 동시에 불러오려면 join이 필요하다.

댓글을 불러올때 내가 원하는 게시물의 댓글만 불러와야 한다.
결국 게시물과 댓글의 정보를 join을 해야 하는데.... 다행히 fk를 넣어놨다.
댓글에 넣은 postid를 이용해서 어느게 선이든 join을 해서 정보를 가져오면된다.

sequelize에서는 join을 할때 include를 사용한다. -> 기본이 inner join이라고 한다.
기준으로 삼은 테이블을 findAll하는데
where에 join할 기준 컬럼
include [(model:모델이름, require: true, attributes: 가져올 항목,)]
으로 가져오면 된다.


const comments = await Post.findAll({
    where: { postId: postId },
    include: [{
      model: Comment,
      require: true,
      attributes: ['postId','text','userId'],
    }]

left join 방법

크게 다를건 없는것 같다. where로 찾는건 같고 indclud도 같고 모델이름 가져오는 것도 같지만 required 옵션을 false로 하면 left join이 된다.

dotenv

팀원 git을 보고 있는데 dotenv라는 코드가 있어서 물어봤는데 환경변수로 공유하고 싶지않은 비밀번호나 자료를 따로 저장하는 것이라고 설명해서 나도 db비번,주소등을 따로 보관해야겠다 생각을 하고 해보기로 했다.
구글로 찾아보니 핵심은 .env파일에 비번이나 공유해서는 안되는 정보들을 예로 sequelize의 config.json에 들어가는 정보들을 따로 .env에 저장을 하고 .env를 사용하는것 -> .env는 git에 올라가면 안된다.

config.js로 파일을 바꾸고 dotenv를 불러와서 사용한다

require('dotenv').config()
const env = process.env

이제 처음 본고 해보는거여서 잘 이해가 안되는게 있지만
안에 jwt의 secretkey도 담아야겠다.

refreshToken 실패 pm 11:00

refreshToken을 로그인을 하면서 access와 refresh를 동시에 생성하면서 쿠키로 뿌리고 현재 프론트가 없어서 next로 다음 미들웨어에서 token검사를 하려고 하는데....

if (!isAccessTokenValidate) {
    const accessTokenId = tokenObject[refreshToken];

access코드가 만료되어서 tokenObject에 저장되었던 id를 이용해서 다시 access를 발급을 받아야 하는데 tokenObject가 넘어오지 않는다..

app.use("/user",[loginRouter,userRouter])
const authMiddle = require('./middlewares/auth-middleware.js')
//loginRouter에서 보냄
res.toekenObject = toekenObject
//authMiddle에서 받음
const tokenObject = req.toekenObject

받을 때 req.toekenObject가 언디파인드로 출력이 계속된다...
방법을 잘 모르겠는데.... 내일 아침에 물어봐야겠다.

profile
렌덤형 인간

0개의 댓글