10.6 사용량 제한 구현하기파트 질문
350
작성자 없음
nodebird-api 미들웨어 index.js코드
const jwt = require("jsonwebtoken");
const rateLimit = require("express-rate-limit");
const User = require("../models/user");
exports.isLoggedIn = (req, res, next) => {
if (req.isAuthenticated()) {
next();
} else {
res.status(403).send("로그인 필요");
}
};
exports.isNotLoggedIn = (req, res, next) => {
if (!req.isAuthenticated()) {
next();
} else {
const message = encodeURIComponent("로그인한 상태입니다.");
res.redirect(`/?error=${message}`);
}
};
exports.verifyToken = (req, res, next) => {
try {
res.locals.decoded = jwt.verify(
req.headers.authorization,
process.env.JWT_SECRET
);
return next();
} catch (error) {
if (error.name === "TokenExpiredError") {
return res.status(419).json({
code: 419,
message: "토큰이 만료되었습니다.",
});
}
return res.status(401).json({
code: 401,
message: "유효하지 않은 토큰입니다.",
});
}
};
exports.apiLimiter = async (req, res, next) => {
let user;
if (res.locals.decoded) {
user = await User.findOne({ where: { id: res.locals.decoded.id } });
}
rateLimit({
windowMs: 60 * 1000,
max: user?.type === "premium" ? 1000 : 10,
handler(req, res) {
res.status(this.statusCode).json({
code: this.statusCode,
message: "1분에 열 번만 요청할 수 있습니다.",
});
},
});
};
exports.deprecated = (req, res) => {
res.status(410).json({
code: 410,
message: "새로운 버전이 나왔습니다. 새로운 버전을 사용하세요",
});
};
nodebird-api routes v2.js 코드
const express = require("express");
const { verifyToken, apiLimiter } = require("../middlewares");
const {
createToken,
tokenTest,
getMyPosts,
getPostsByHashtag,
} = require("../controllers/v2");
const router = express.Router();
router.post("/token", apiLimiter, createToken);
router.get("/test", verifyToken, apiLimiter, tokenTest);
router.get("/posts/my", verifyToken, apiLimiter, getMyPosts);
router.get("/posts/hashtag/:title", verifyToken, apiLimiter, getPostsByHashtag);
module.exports = router;
프리미엄으로 클라이언트 비밀키 발급하고 프리미엄만 사용량제한 구현했는데 터미널에 GET/search/%EA%B3%A0%EC%96%91%EC%9D%B4 - - ms - - 이렇게 나오고 사이트로딩만 뜹니다 ㅜㅜ
답변 1
0
nodecat 말고 nodebird-api쪽 터미널 봐보세요.
깃헙 질문
0
94
2
강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.
0
99
1
aws - lightsail 이용 관련
0
83
1
4강 http 서버 만들때 ESM방식으로 해도 될까요?
0
101
2
모듈 사용 시 단점이 있나요?
0
101
1
node.js 버전 및 typescript 적용 문의
0
104
2
12.7. 방장기능(강퇴) 질문드립니다.
0
89
2
12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요
0
77
1
12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.
0
87
2
12.7.1스스로 해보기 질문되나요
0
102
3
시퀄라이즈 실습하기 질문드립니다.
0
221
9
<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.
0
111
2
크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.
0
127
2
구매 결제관련 질문입니다 !
0
131
1
다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제
0
143
2
node 설치 방법이 전혀다르게 바뀐것 같습니다.
0
162
2
12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류
0
130
2
무료/프리미엄 동시 소유 시 질문
0
121
1
비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?
0
149
2
10강 cors에러 localhost:4000으로 접속했을때 에러
1
167
2
webstorm 해결할 수 없는 변수 문제
0
161
2
혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?
0
150
2
LightSail 실행 중 오류 질문드립니다!
0
214
2
RedisStore 사용법 질문
0
142
2





