TIL-20230626

민태영·2023년 6월 26일
0

토큰인증하기

1. 인증?

클라이언트에서 서버로 로그인을 요청할 때 서버가 jwt를 생성하여 클라이언트에 보낸다. 클라이언트는 서버에게 웹서비스를 이용할 때 마다 jwt토큰을 보내 자신이 인증받은 유저라는 것을 증명하고 서버는 유저에게 웹서비스를 제공한다.

2. 어떻게 인증할까?

1) 환경설정

(1) 먼저 request안의 cookie에 접근하려면 cookie-parser가 필요하다

$ npm install cookie-parser

(2) app.js에 전역으로 선언을 해준다.

const cookieParser = require("cookie-parser");

app.use(cookieParser());

2) 로그인요청을 받았을 시 jwt를 res에 담아 클라이언트로 보내기

(1) 로그인시 jwt를 res.cookie에 저장

    const token = jwt.sign({ userId: user.userId }, "secretKey", {
      expiresIn: "1h",
    });
        // bearer타입으로 클라이언트에 token을 전달
    res.cookie("authorization", `Bearer ${token}`);

3) 로그인한 유저가 로그인이 필요한 서비스요청을 할 때

(1) 클라이언트가 보낸 req안의 cookie에 접근

auth-middleware.js
// 요청에 들어있는 cookie에 접근
const { jwtname } = req.cookies;
// bearer를 중심으로 jwt의 type과 값을 분리
const [tokenType, token] = authorization.split(" ");

// authorization가 없으면
if (tokenType !== "Bearer" || !token) {
    return res.status(401).json({ message: "로그인 후에 이용가능합니다." });
}

(2) jwt.verify로 token값을 decoded하여 상수에 담는다.

const decodedToken = jwt.verify(token, "secretKey")

(3) decodedToken에 있는 유저의 ID가 데이터베이스에 있는지 확인하여 가입한 유저인지 확인

const user = await Users.findOne({ where: { userId } });

(4) 가입여부가 확인되면 서버의 api에 유저의 정보를 보낸다.

res.locals.user = user;
next()
profile
꿈을 꾸는 개발자

0개의 댓글