로그인으로 얻은 쿠키 데이터를 CRUD에 접목시키자
먼저 쿠키데이터를 전역으로 보내주기 위해서 작업 폴더에 middlewares라는 폴더를 만든다.
그리고 그 폴더에 login-middleware.js 파일을 만든다.
./middlewares/ login-middleware.js 경로에서
최상단에 User와 jwt를 가져오기 위한 require을 작성한다.
const jwt = require("jsonwebtoken")
const User = require("../schemas/user")
middleware에서 쿠키데이터를 검증하고 jwt로 암호화된 쿠키 데이터를 정상적인 데이터로 다시 가공해서
module.exports로 보낸다.
module.exports = async (req, res, next) => {
const { Authorization } = req.cookies;
//authorization이 쿠키가 존재하지 않았을 때 대비
const [authyType, authToken] = (Authorization ?? "").split(" ");
//authType===Barer값인지 확인
//authToken 검증
if (authyType !== "Bearer" || !authToken) {
res.status(403).json({
errorMessage: "로그인이 필요한 기능입니다."
})
return;
}
//authToken이 만료되었는지 확인
//autuToken이 서버가 발급한 토큰이 맞는지 검증
//authToken에 있는 userId에 해당하는 사용자가 실제 DB에 존재하는지 확인
//jwt검증
try {
//1.authToken이 만료되었는지 확인
//2.authToken이 서버가 발급 토큰이 맞는지 검증
const { userId } = jwt.verify(authToken, "customized-secret-key");
//3.authToken에 있는 userId에 해당하는 사용자가 실제 DB에 존재하는지 확인
const user = await User.findById(userId);
res.locals.user = user;
next();//이 미들웨어 다음으로 보낸다.
} catch (error) {
console.error(error);
res.status(403).json({ errorMessage: "전달된 쿠키에서 오류가 발생하였습니다." })
return;
}
}
암호화를 해금한 쿠키데이터는
res.local.user=user로 할당한다.
이것을 통해서 본인인증을 자동으로 할 수 있다.
기존 CRUD의 비밀번호 검증과는 다르게
router.post("/posts", loginMiddleware, async (req, res)
post에 middleware를 넣고,
const { userId } = res.locals.user;
const existsUser = await Post.find({ userId });
현재의 쿠키데이터를 가지고 있는 유저가 존재하는지 확인함으로써 본인인증이 가능해진다.
'개인과제(로그인,회원가입 및 Mysql)' 카테고리의 다른 글
[내일배움캠프] 주특기 숙련주차 개인과제 lv3 mysql CRUD (0) | 2023.07.16 |
---|---|
[내일배움캠프] 주특기 숙련주차 개인과제 lv3 mysql (0) | 2023.07.09 |
[내일배움캠프] 주특기 숙련주차 개인과제 lv2 로그인 회원가입 기능-4- (0) | 2023.07.09 |
[내일배움캠프] 주특기 숙련주차 개인과제 lv2 로그인 회원가입 기능-2- (0) | 2023.06.27 |
[내일배움캠프] 주특기 숙련주차 개인과제 lv2 로그인 회원가입 기능-1- (0) | 2023.06.27 |