티스토리 뷰

 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이어서 로그인이 되지 않았다.

 

그래서 뭐가 문제인지 며칠 동안 구글링 등을 통해 문제가 될 수 있는 부분들을 찾아보고 수정하고 했지만 해결되지 않았다. 그래서 관리자 도구의 네트워크을 확인했다.

 

배포 서버의 login
배포 서버의 userInfo

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

 

 

 

 

로컬 서버의 userInfo

하지만 로컬 서버의 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 속성을 추가하면 기존 쿠키와 새로 설정된 쿠키가 별도로 관리됨. 이로 인해 사용자에게 불편함이 발생할 수 있습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함