작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
282
0
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
선생님 답변감사합니다 api터미널에 오류는 안뜨는데 max:1은 실행되는데 10부터 실행이 안되네요