놀라운 아이디어는 넘쳐난다. 단지 부족한 점은 그것을 실행하는 의지이다.
- 세스 고딘 -
- GET 메서드는 Body에다가 데이터를 실을 수 없다. Query String 주소 뒤에 물음표로 어쩌고 저쩌고 해야 하는데 주소에 노출되기 때문에 보안과 관련된 데이터를 사용할 때는 이렇게 하면 안 된다. 따라서 로그인과 같은 기능은 GET보다 POST 메서드를 이용하는 게 좋다.
- 로그인 시 입력한 데이터와 회원가입으로 인해 DB에 저장된 데이터를 비교하여 같을 경우 성공한 사용자의 유저 아이디를 JWT토큰에 담아 사용자에게 주는 과정이 로그인이다.
- 미들웨어 만들기! 기능이 다르기 때문에 폴더를 만든 후 거기에 새 파일을 생성한다.
- 미들웨어는 반드시 next가 호출되어야 한다. 호출되지 않을 경우 미들웨어 레벨에서 예외 처리에 걸려서 그 뒤에 있는 미들웨어까지 연결이 안되는 형식이다.
module.exports = (req, res, next) => {
next();
}
// 사용자 인증 미들웨어 구현하기
const jwt = require("jsonwebtoken")
const User = require("../models/user")
module.exports = (req, res, next) => {
const { authorization } = req.headers
const [tokenType, tokenValue] = authorization.split(' ')
if (tokenType !== 'Bearer') {
res.status(401).send({
errorMessage: '로그인 후 사용하세요'
})
return
}
try {
const { userId } = jwt.verify(tokenValue, "my-secret-key")
User.findById(userId).exec().then((user) => {
res.locals.user = user
next()
})
} catch (error) {
res.status(401).send({
errorMessage: '로그인 후 사용하세요'
})
return
}
}
- 오늘 한 일: 회원가입/로그인/사용자인증(미들웨어)/내 정보 조회 API 구현 , Joi를 이용한 Validation검증. validateAsync 사용했음(에러가 날 경우 throw 하기 때문에 try catch구문 사용 후 try에 넣어 감싼다), status에 대한 기본개념, virtual스키마 생성(DB에는 안 들어가는 스키마 같은데 왜 하는지 어떤 효과가 있는지 정확히 모르겠다.)
- 내일 할 일: node 심화반 강의 다 들으며 숙제 제출하기. 가급적 다 듣는 것을 목표로 하되 너무 벅찰 경우 연습을 오래 하며 감을 익힐 예정
- JWT, 쿠키, 세션 각각 방식의 특징과 각 방식 별로 나눠서 구현해보면 좋을 것 같다.
- 아직도 프로미스와 async await를 제대로 이해하지 못한 것 같다. 그냥 정형화된 형태가 있으니 그것을 사용해야겠다 하고 외웠다. 이해하고 프로미스와 async await를 자유자재로 쓰는 날이 왔으면좋겠다. callback 함수도 아직 뭔지 잘 모르겠다. ㅠㅠ 콜백 지옥이 뭔지 제대로 이해하고 싶다. 나는 함수에 약한가 보다.
- 오늘은 개발자 도구를 처음으로 의미 있게 사용해봤다.
- 오류가 떴을 경우 어떻게 고쳐야 되는지 조금씩 감이 잡힌다. 도움 없이 스스로 고쳐본 것은 오늘이 처음인 것 같다.
- RESTAPI가 점점 익숙해진다.