클라이언트에서 서버로 로그인을 요청할 때 서버가 jwt를 생성하여 클라이언트에 보낸다. 클라이언트는 서버에게 웹서비스를 이용할 때 마다 jwt토큰을 보내 자신이 인증받은 유저라는 것을 증명하고 서버는 유저에게 웹서비스를 제공한다.
(1) 먼저 request안의 cookie에 접근하려면 cookie-parser가 필요하다
$ npm install cookie-parser
(2) app.js에 전역으로 선언을 해준다.
const cookieParser = require("cookie-parser");
app.use(cookieParser());
(1) 로그인시 jwt를 res.cookie에 저장
const token = jwt.sign({ userId: user.userId }, "secretKey", {
expiresIn: "1h",
});
// bearer타입으로 클라이언트에 token을 전달
res.cookie("authorization", `Bearer ${token}`);
(1) 클라이언트가 보낸 req안의 cookie에 접근
// 요청에 들어있는 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()