• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 middleware 질문입니다.

middleware 질문입니다.

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #96040

    호놀룰루
    참가자
    안녕하세요 middleware 질문드립니다.
    
    모든페이지에서 유저 정보가 필요해서, middleware에서 유저 정보 api 호출하고 리턴 값을 모든 페이지에 전달하고 싶은데 가능할까요?? 
    추가로,  middleware에서 api 호출하는게 적합한 방법인가요??
     
    로그인 -> 토큰 값 cookie에 저장 - > middleware에서 쿠키에 저장된 토큰 값으로 getUser() 호출해서 유효한 정보면 그 값을 리턴 하고 아니면 로그인 페이지나 메인페이지로 이동
    
    
    
    import { NextResponse } from "next/server";
    export default async function middleware(request, response, next) {
      const token = request.cookies.get("token")?.value
        ? request.cookies.get("token").value
        : null;
      let getUser;
      try {
        if (token) {
          const data = await (
            await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/api/user-info`, {
              headers: { Authorization: `Bearer ${token}` },
            })
          ).json();
          getUser = data?.code === 0 ? { ...data } : false;
          request.apiData = getUser;
          console.log(request.apiData, "requestttttttt");
          //   return getUser;
        }
      } catch (error) {
        // response.status(500).json({ error: "An error occurred" });
        return NextResponse.redirect(new URL("/", request.url));
      }
      console.log(getUser, "mid");
      if (request.nextUrl.pathname.startsWith("/management")) {
        if (getUser === false || getUser === "undefined" || token === null) {
          console.log(token, "token");
          return NextResponse.redirect(new URL("/login", request.url));
        }
      }
      if (request.nextUrl.pathname.startsWith("/main-login")) {
        if (getUser === false || getUser === "undefined" || token === null) {
          console.log(token, "token");
          return NextResponse.redirect(new URL("/", request.url));
        }
      }
    }
    #96052

    codingapple
    키 마스터
    js나 img 파일 가져올 때도 미들웨어가 실행되어서 
    if문으로 특정 url 방문시에만 실행하라고 잘 지정해주면 괜찮을수도요
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠