키모스토리

#8. Auth & Guest Links 본문

Web Devlopment/Next-Blog Project

#8. Auth & Guest Links

키모형 2025. 4. 5. 14:21
반응형

로그인 세션을 이용한 조건부 Links 구현

 

1. 유효한 로그인 유저인지 검증

/src/lib/getAuthUser.js

header -> cookies -> session 정보를 읽어서 jwt 복호화 한 후 올바른 세션값인지 확인 후 로그인 정보 리턴

import { cookies } from "next/headers";
import { decrypt } from "./session";

export default async function getAuthUser() {
  // Get Cookies
  const coookieStore = await cookies();
  const session = coookieStore.get("session")?.value;
  // console.log("session=", session);
  if (session) {
    const user = await decrypt(session);
    return user;
  }
  // 세션이 없으면 null을 반환합니다.
  return null;
}

 

2. Navigation 페이지에서 로그인 정보를 확인 후 로그인 여부에 따른 링크구현

로그아웃 버튼의 경우 form action 에 아래 로그아웃 처리 action 함수로 링크

import getAuthUser from "@/lib/getAuthUser";
import NavLink from "./NavLink"
import { logout } from "@/actions/auth";

export default async function Navigation() {

  const authUser = await getAuthUser();
  // console.log("authUser=", authUser);

  return (
    <nav>
      <NavLink label="Home" href="/" />
      {authUser ? 
        (
          <div className="flex items-center">
            <NavLink label="Dashboard" href="/dashboard" />
            <form action={logout}>
              <button className="nav-link">Logout</button>
            </form>
          </div>
        ) : 
        (
          <div className="flex items-center">
            <NavLink label="Register" href="/register" />
            <NavLink label="Login" href="/login" />
          </div>
        )}      
    </nav>
  )
}

 

3. 로그아웃 처리

/src/actions/auth.js 

// 로그아웃 요청을 처리하는 서버 액션입니다.
export async function logout() {
  const coookieStore = await cookies();
  coookieStore.delete('session');
  redirect("/");
}

 

반응형

'Web Devlopment > Next-Blog Project' 카테고리의 다른 글

#10. Read Blog Posts (home)  (0) 2025.04.05
#9. Create Blog Posts  (0) 2025.04.05
#7. Login  (0) 2025.04.05
#6. Active Links  (0) 2025.04.05
#5. server-only  (0) 2025.04.05