728x90
Node.js 숙련 1주차_4
로그인 & JWT 구현
📄 app.js
const jwt = require("jsonwebtoken");
// 로그인
router.post("/auth", async(req,res) => {
const {email, password} = req.body;
const user = await User.findOne({email});
// 사용자가 존재하지 않거나,
// 입력받은 password와 사용자의 password가 다를 때 에러메세지가 발생해야 한다.
if(!user || password !== user.password){
res.status(400).json({
errorMessage: "사용자가 존재하지 않거나, 사용자의 password와 입력받은 password가 일치하지 않습니다."
});
return;
}
const token = jwt.sign({userId:user.userId}, "sparta-secret-key");
res.status(200).json({
"token": token,
})
})
app.use("/api", express.urlencoded({ extended: false }), router);
app.use(express.static("assets"));
app.listen(8080, () => {
console.log("서버가 요청을 받을 준비가 됐어요");
});
사용자 인증 미들웨어 구현
토큰 검증!
header - token
📄 app.py
const authMiddleware = require("./middlewares/auth-middleware.js");
router.get("/users/me", authMiddleware, async(req, res) => {
})
📄 /middlewares/auth-middleware.js
// 모델, jwt 가져와서 사용
const jwt = require("jsonwebtoken");
const User = require("../models/user.js");
module.exports = async (req, res, next) => {
const {authorization} = req.headers;
// authType : Bearer
// authToken : 실제 jwt 값
const [authType, authToken] = authorization.split(" ");
if(authType !== "Bearer" || !authToken){
res.status(400).json({
errorMessage: "로그인 후 사용이 가능한 API 입니다."
});
return;
}
try{
// 복호화 및 검증
const {userId} = jwt.verify(authToken, "sparta-secret-key")
const user = await User.findById(userId);
res.locals.user = user;
// console.log(user);
next();
} catch(error){
// console.log(error);
res.status(400).json({
errorMessage: "로그인 후 사용이 가능한 API 입니다."
})
}
return;
}
res.locals.user : 미들웨어를 사용하는 라우터에서는 굳이 데이터베이스에서 사용자 정보를 가져오지 않게 할 수 있도록 express가 제공하는 안전한 변수에 담아두고 언제나 꺼내서 사용함!
내 정보 조회
📄 app.js
const authMiddleware = require("./middlewares/auth-middleware.js");
router.get("/users/me", authMiddleware, async(req, res) => {
res.json({user: res.locals.user});
})
'JavaScript' 카테고리의 다른 글
Node.js 숙련 1주차_6 (1) | 2022.12.21 |
---|---|
Node.js 숙련 1주차_5 (0) | 2022.12.21 |
Node.js 숙련 1주차_3 (0) | 2022.12.20 |
Node.js 숙련 1주차_2 (0) | 2022.12.19 |
Node.js 숙련 1주차_1 (0) | 2022.12.19 |