본문 바로가기

JavaScript

Node.js 숙련 1주차_4

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