수정일 - 24/09/17
A라는 웹 사이트의 컨텐츠를 로그인한 사람만 사용 가능하게 설정

JWT란 Client <-> Website(Server) 간에 정보를 JSON 개체로 안전하게 전송하기 위한 개방형 표준(RFC-7519)
JWT 방식을 이용하게 되면 Stateless 하다


토큰에 포함될 Claim 정보를 담음 (3가지)
- 등록된 클레임(Registerd Claims): 표준적인 클레임으로, 일반적으로 토근에 포함되는 정보
Ex) "iss:(발급자), "exp"(만료시간), "sub"(주체) 등이 있다.
-개인 클레임 (Private Claims): 서로 협의한 클레임으로, 서버와 클라이언트 간에 사용되는 사용자 정의 클레임입니다.
import jwt from "jsonwebtoken";
export const generateTokenAndSetCookie = (userId, res) => {
const token = jwt.sign({userId}, process.env.JWT_SECRET, {
expiresIn: "7d",
});
res.cookie("jwt", token, {
maxAge: 7 * 24 * 60 * 60 * 1000, // ms
httpOnly: true, // XSS attack
sameSite: "strict",
secure: process.env.NODE_ENV !== "development",
});
};
generateTokenAndSetCookie : 토큰 + 쿠키 발행
jwt.sign(): 이 함수를 통해 생성된 토큰은 userId의 정보를 담음
-> 이 토큰으로 서버 <-> 클라이언트 간 인증을 위한 정보로 사용
JWT_SECRET : git bash 터미널에 openssl rand -base64 32 입력
-> 32바이트 길이의 랜덤 문자열을 base64로 인코딩해서 출력해줌 (랜덤 값 만들기)
res.cookie(): 클라이언트의 브라우저에 저장되는 데이터 조각
인증 토큰(token)을 쿠키에 저장해 웹 사이트의 다른 페이지를 오갈 수 있는 통행증 역할을 함
