개발자
안녕하세요. 현재 로그아웃 기능을 구현하고 있습니다. 로그아웃 진행 시 다른 서브 도메인을 갖고 있는 사이트로 redirect 시킨 후 다시 돌아와야 합니다. 예) a.example.com에서 로그아웃 시 -> b.example.com?redirect=a.example.com 사이트로 리다이렉트 후 다시 a.example.com 사이트로 이동 해당 로직을 구현 함에 있어 클라이언트에서는 문제가 없습니다. 하지만, 서버 미들웨어에서 정상 동작은 하나 첨부 이미지와 같은 CORS 에러가 발생됩니다. 서버/클라이언트에서 동시에 사용할 수 있는 코드로 로그아웃 버튼을 클릭 하여 로그아웃 처리되는 로직을 만들고 싶은데요. 방법이 있을까요? (서버에서 로그아웃 처리가 필요한 이유는 토큰 만료 시 서버 단에서 로그아웃 시키기 위하여..) 단, b.example.com 사이트에서는 어떠한 설정도 불가능
1// client에서는 문제 없음
2const logout = useCallback(() => {
3 window.location.replace(
4 `https://b.example.com?redirect=${window.location.href}`,
5 );
6}, []);
7
8// server middleware에서 CORS 문제
9export async function middleware(req: NextRequest) {
10 const { nextUrl } = req;
11 const requestHeaders = new Headers(req.headers);
12
13 if (nextUrl.pathname === '/logout') { // 임의의 주소 /logout 경로 접근 시
14 return NextResponse.redirect(
15 `https://b.example.com?redirect=${requestHeaders.get('referer')}`,
16 );
17 }
18
19 return NextResponse.next();
20}
21
22export const config = {
23 matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
24};
답변 0
첫 답변을 기다리고 있어요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 11월 24일
서버와 클라이언트에서 동일한 로직을 사용하기 위해서는, CORS 문제를 해결해야 할 것 같습니다. 이 문제는 서버가 다른 도메인의 요청을 받을 때 발생하는데요. CORS 정책은 현재 브라우저 보안 정책의 일부로, 같은 출처가 아닌 요청에 대한 제한을 의미합니다. 여기서 "같은 출처"라는 것은 도메인 이름, 프로토콜 (http 또는 https), 그리고 포트 번호까지 모두 일치해야 합니다. 아래 방법들 중 하나를 사용하여 해당 문제를 해결할 수 있습니다: - **프록시 설정**: 서버에서 공유되어야 하는 리소스에 대해 프록시를 설정하여 요청이 리디렉션 되거나 전송되게 할 수 있습니다. - **Access-Control-Allow-Origin 헤더 사용**: 서버가 응답으로 Access-Control-Allow-Origin 헤더를 포함하도록 설정하면, 브라우저는 이 응답을 받아들여 다른 도메인의 스크립트가 해당 리소스에 액세스할 수 있게 됩니다. 그러나 당신이 말씀하신 것처럼 `b.example.com` 사이트에서 어떠한 설정도 변경할 수 없다면, 위 방법을 사용하는 것이 불가능할 수 있습니다. 이 경우, `a.example.com`과 `b.example.com` 사이에 서버를 하나 더 두어 프록시 역할을 하는 것을 고려해 볼 수 있습니다. 이 중간 서버에서 모든 요청을 처리하고, 필요한 경우 직접 리디렉션을 수행하도록 할 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!