
Set-Cookie를 통해 액세스 토큰을 설정하며 httpOnly, sameSite, path 등의 속성을 지정했다.res.cookies.set을 호출하여 동일한 쿠키를 재설정할 때, 기존 속성들이 반영되지 않고 기본값으로 설정됐다.res.cookies.set은 새 쿠키 생성 동작으로 간주된다.res.cookies.set은 핸들러의 Set-Cookie 헤더에서 읽은 속성을 자동으로 상속하지 않는다.path: '/')으로 처리된다.Next.js cookies options: Functions: cookies
ResponseCookies와 res.cookies.setResponseCookies는 Set-Cookie 헤더를 파싱하여 속성을 읽을 수 있게 하지만, res.cookies.set으로 새로운 응답 객체에 쿠키를 설정할 때 속성을 명시하지 않으면 기본값으로 덮어씌워진다.ResponseCookies를 사용한 이유
- 최신 쿠키 접근 가능: 서버 응답의
Set-Cookie헤더에서 최신 데이터를 가져올 수 있다.- 관련 참고 문헌: Velog
ResponseCookies를 활용하여 백엔드의 Set-Cookie 헤더를 파싱하고, 파싱된 값을 그대로 클라이언트 응답 쿠키에 설정한다.// 백엔드 코드는 변함없음.
const response = NextResponse.json({ message: 'Token refreshed' });
response.cookies.set('accesstoken', newAccessToken, {
httpOnly: true,
sameSite: 'strict',
path: '/',
});
return response;
if (response.ok) {
const res = NextResponse.next();
const responseCookies = new ResponseCookies(response.headers);
const accessToken = responseCookies.get('accesstoken');
const refreshToken = responseCookies.get('refreshtoken');
// 백엔드에서 설정된 쿠키의 속성을 그대로 상속받는다.
if (accessToken) {
res.cookies.set('accesstoken', accessToken.value, {
httpOnly: accessToken.httpOnly,
sameSite: accessToken.sameSite,
path: accessToken.path,
secure: accessToken.secure,
});
}
// 백엔드에서 설정된 쿠키의 속성을 그대로 상속받는다.
if (refreshToken) {
res.cookies.set('refreshtoken', refreshToken.value, {
httpOnly: refreshToken.httpOnly,
sameSite: refreshToken.sameSite,
path: refreshToken.path,
secure: refreshToken.secure,
});
}
return res;
}
ResponseCookies를 활용하여 백엔드에서 설정한 모든 쿠키 속성을 자동으로 상속받아 처리했다.