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.set
ResponseCookies
는 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
를 활용하여 백엔드에서 설정한 모든 쿠키 속성을 자동으로 상속받아 처리했다.