티스토리 뷰
checkUserInfo라는 서버의 유저 정보를 확인하는 함수를 작성했었다. 이 함수에서는 요청의 cookies에서 액세스 토큰, 리프레시 토큰을 이용하여 유저 정보를 확인한다. 아래는 이 함수의 코드이다.
export const checkUserInfo = async (req, res) => {
const { cookies } = req;
if (cookies === null) {
return res.status(codes.badRequest).json("쿠키 없음");
}
const accessToken = cookies.access_jwt;
const refreshToken = cookies.refresh_jwt;
const accessPayload = verifyToken(ACCESS, accessToken);
if (accessPayload) {
const { id } = accessPayload;
const userInfo = await Account.findOne({ userId: id });
if (userInfo) {
const checkedUserInfo = { ...userInfo.toObject() };
delete checkedUserInfo.password;
return res.json(checkedUserInfo);
} else {
return res.status(401).send("Not Authorized");
}
} else if (refreshToken) {
const refreshPayload = verifyToken(REFRESH, refreshToken);
if (!refreshPayload) {
return res.status(401).send("Not Authorized");
}
const { id } = refreshPayload;
const userInfo = await Account.findOne({ userId: id });
const { accessToken } = generateToken(userInfo);
res.cookie("access_jwt", accessToken, cookieOption);
const checkedUserInfo = { ...userInfo.toObject() };
delete checkedUserInfo.password;
return res.json(checkedUserInfo);
}
return res.status(401).send("Not Authorized");
};
서버롤 localhost:4000에서 실행했을 때는 문제가 없었지만 배포한 서버에서 req.cookies가 null이어서 로그인이 되지 않았다.
그래서 뭐가 문제인지 며칠 동안 구글링 등을 통해 문제가 될 수 있는 부분들을 찾아보고 수정하고 했지만 해결되지 않았다. 그래서 관리자 도구의 네트워크을 확인했다.


우선은 배포 서버이다. checkUserInfo의 req.cookies가 null이었는데 실제로도 cookie가 없는 것을 확인할 수 있다.

하지만 로컬 서버의 userInfo에는 cookie가 존재했다. 이를 해결하기 위해 쿠키 옵션에서 domain 부분을 localhost:3000(로컬 클라이언트), http://localhost:3000, 실제 배포 주소 등으로 바꿔보았지만 문제는 해결되지 않았다. 그래서 마지막 수단으로, 현재 도메인을 이용하기 위해 domain 속성을 지웠다. 그랬더니 문제가 해결되긴 했다.
const cookieOption = {
path: "/",
httpOnly: true,
sameSite: "none",
secure: true,
};
const refreshCookieOption = {
path: "/",
httpOnly: true,
sameSite: "none",
secure: true,
expires: new Date(Date.now() + 24 * 3600 * 1000 * 7),
};
하지만 domain 속성을 삭제할 경우 문제가 생길 수 있지 않을까라는 생각이 들었다. 그래서 이 경우의 장점과 단점을 찾아보았다.
장점
- 간소화: 쿠키 설정이 간결해짐. 특정 도메인을 지정할 필요가 없으므로 설정 오류의 위험이 줄어들게 됨.
- 보안: 도메인을 지정하지 않으면 해당 쿠키는 현재 도메인에 한정됨. 이로써 다른 하위 도메인이나 관련 도메인에 대한 쿠키 노출을 방지.
단점
- 유연성 제한: Domain 속성을 설정하면 여러 하위 도메인에 동일한 쿠키를 사용할 수 있지만, Domain 속성을 지정하지 않으면 이러한 유연성이 제한됨.
- 변경 불가: 나중에 하위 도메인에서도 쿠키를 공유하고 싶을 경우, Domain 속성을 추가하면 기존 쿠키와 새로 설정된 쿠키가 별도로 관리됨. 이로 인해 사용자에게 불편함이 발생할 수 있습니다.
'기록' 카테고리의 다른 글
개인 Next.js 프로젝트 현재까지 후기 (0) | 2023.08.31 |
---|---|
useRef와 forwardRef (0) | 2023.08.13 |
cloudtype을 이용하여 Express.js 애플리케이션 배포하기 (0) | 2023.08.04 |
React에 MongoDB, AWS S3 적용해보기 (0) | 2023.07.29 |
AWS Access key 유출되고 나서 한 것들 (0) | 2023.07.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리액트
- 넥스트js
- SQL
- 타입스크립트
- typescript
- NextJS
- 코드스테이츠
- 카카오맵
- BFS
- 구현
- 자바스크립트
- Next.js
- Redux
- 프로그래머스
- async
- aws
- 알고리즘
- 동적계획법
- themoviedb
- 완전탐색
- 햄버거버튼
- 백준
- CSS
- 순열
- 비트마스킹
- 브루트포스
- C++
- 다이나믹프로그래밍
- react
- 스택
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함