티스토리 뷰

이슈 사항

회원 가입 후에 로그인 페이지로 이동하도록 했는데 로그인 페이지 이동 버튼을 클릭해도 페이지 접속이 되지 않는 문제가 발생했다. 로그인 한 사람은 회원가입과 로그인 페이지 접속을 막아뒀는데 이 부분에서 뭔가 잘못된 것 같았다.

 

이슈 발생 코드

import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import { updateSession } from "./utils/supabase/middleware";
import { createClient } from "./utils/supabase/server";

export async function middleware(request: NextRequest) {
  await updateSession(request);

  const serverClient = createClient();

  const {
    data: { user }
  } = await serverClient.auth.getUser();

  const isLogin = !!user;

  if (isLogin && (request.nextUrl.pathname.startsWith("/login") || request.nextUrl.pathname.startsWith("/signUp"))) {
    return NextResponse.redirect(new URL("/", request.url));
  }

  if (!isLogin && request.nextUrl.pathname.startsWith("/myPage")) {
    return NextResponse.redirect(new URL("/", request.url));
  }

  return NextResponse.next();
}

/** 어떤 페이지에서 이 미들웨어를 실행할거니 */
export const config = {
  matcher: ["/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)"]
};

 

await serverClient.auth.getUser() 를 통해 사용자 정보를 조회하고 로그인 되어있으면, 로그인 페이지 접속 시 홈으로 이동하도록 했다.

 

원인

수파베이스에서는 회원가입을 하면 자동으로 세션이 바로 저장되도록 되어있다고한다.

 

회원가입 후 바로 세션 날리기

export async function signup(formData: User) {
  const supabase = createClient();

  const { data, error } = await supabase.auth.signUp({
    email: formData.email,
    password: formData.password,
    options: {
      data: {
        user_name: formData.name,
        nickname: formData.nickname
      }
    }
  });

  if (error) {
    return { error: error.message };
  }
  // 회원가입 후 세션을 종료하여 자동 세션 저장 방지
  await supabase.auth.signOut();

  return { data };
}

signOut() 메서드를 요청하여 세션을 없애주도록 하였다.

 

'Next.js' 카테고리의 다른 글

[Next.js] 사전렌더링 이해하기  (0) 2024.09.27
최근에 올라온 글
Total
Today
Yesterday
링크