인프런 커뮤니티 질문&답변

이종민님의 프로필 이미지

작성한 질문수

Next + React Query로 SNS 서비스 만들기

팔로잉 게시글, 검색 결과 불러오기

next-auth의 ClientFetchError 에러가 발생했습니다.

24.01.03 12:45 작성

·

1.2K

·

수정됨

0

app-index.js:32 ClientFetchError: Unexpected token '<', "<!doctype "... is not valid JSON .Read more at https://errors.authjs.dev#autherror    
   at fetchData (client.js:39:1)    
   at async getSession (react.js:87:1)    
   at async __NEXTAUTH._getSession (react.js:245:1)

이런 에러가 뜨고 있습니다...
이전까지는 잘 동작했는데, 어느순간부터 이런 에러가 발생합니다.
Next-Auth 라이브러리 문제인 것 같아서 Github Issues까지 확인해서 적용해봤는데 에러가 해결되지 않는 것 같습니다...

auth.ts, middleware.ts, app/api/auth/[...nextauth]/route.ts 혹시나해서 모두 선생님 코드 복사, 붙여넣기 했고, 로그인 관련 코드도 모두 복사 붙여넣기 했는데 에러가 발생하는 것 같습니다.

로그인 시 로그인 session이 cookie에 담기긴 하나, 이것을 useSession()을 통해 값을 불러오진 못하고 있고, auth.ts에서 로그인할 때 console.log한 경우에 user 값이 제대로 찍히는 것 까진 확인했습니다.

답변 3

0

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 18:31

선생님 이거 브라우저 문제였던 것 같습니다.
다른 프로젝트의 세션과 충돌나는 걸로 의심이 됩니다...
시크릿 탭에서는 잘 되는데, 일반 탭에서만 useSession의 response가 중간에 제가 하고 있는 기존의 다른 프로젝트의 html로 보내지는 것 같습니다!

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 18:34

추가적으로 브라우저 자체의 쿠키랑 인터넷 기록을 다 지우니깐 되네요... ㅜㅜ

0

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 14:23

혹시 필요하실 수도 있으실 것 같아 깃허브 링크도 남겨두겠습니다!

https://github.com/JongMany/nextjs-clone-study

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 14:30

스크린샷 2024-01-03 오후 2.25.48.png처음 페이지에서부터 저 오류가 나오고
스크린샷 2024-01-03 오후 2.28.03.png로그인한 후에 메인화면으로 넘어가긴 하는데 세션 정보를 못 불러와서 아래 로그아웃 버튼과 트렌드쪽에서 저렇게 나옵니다.

그런데 로그인한 직후에 cookie 보니깐 잘 들어가 있는 것 같아요스크린샷 2024-01-03 오후 2.28.15.png

그러면 useSession에서 뭔가를 잘못받아오는 것 같다는 생각이 듭니다...ㅜㅜ

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 01. 03. 14:40

강의 깃헙 ch3-1, ch3-2 모두 해봤는데 잘 됩니다.

네트워크 탭에서 localhost:3000/api/auth/session 요청 보내는 것 있는지 확인해보세요. 그게 useSession() 데이터 가져오는 겁니다.

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 15:01

image보내고 있습니다!
다만, Response를 확인했을 때 HTML로 넘어오더라구요image

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 01. 03. 15:15

app/api/auth/

이 폴더에 다른 파일 있거나 그런 거 아닌가요?

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 15:29

확인해봤는데 없었습니다 ㅜㅜ

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 15:46

전 선생님 코드도 제대로 안돌아가는 것 같아요... 그럼 브라우저 문제인건가요??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 01. 03. 16:06

혹시 뭐 다른 서버 실행 중인 건 아닌가요? 예전에는 잘 됐으면 그 때로 되돌아가는 수밖에 없습니다. 깃 커밋을 틈틈이 해두거나 그런 방식으로요.

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 16:24

5시간 전에 다른 프로젝트를 돌리긴 했었는데, 현재는 아니기도 할 뿐 더러 사파리로는 되는데 크롬으로는 안되는 신기한 현상이 발생해서 답답하네요 ㅜㅜ

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 01. 03. 13:23

msw 서버 켜셨나요? 제 코드 복사하셨고요?

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 13:54

넵 둘다 했습니다!

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 13:57

다른 데이터는 mock 서버로부터 잘 받아와지는데 useSession같이 세션정보만 못받아오는 것 같아요

근데 session-token은 저장되어 있는 상태입니다

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 01. 03. 13:58

auth.ts 한 번 보여주세요

지금 json이 와야하는 라우터에서 html이 오고있는 건데요. 보통 404인 경우 이렇게 html이 오고, 주소 틀린 경우도 많습니다.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 01. 03. 14:01

.env에 URL 관련도 다 넣으셨나요?

이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 14:01

import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';

export const {
  handlers: { GET, POST },
  auth,
  signIn,
} = NextAuth({
  pages: {
    signIn: '/i/flow/login',
    newUser: '/i/flow/signup',
  },
  providers: [
    CredentialsProvider({
      async authorize(credentials, req) {
        try {
          const authResponse = await fetch(
            `${process.env.AUTH_URL}/api/login`,
            {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json',
              },
              body: JSON.stringify({
                id: credentials.username,
                password: credentials.password,
              }),
            }
          );

          if (!authResponse.ok) {
            return null;
          }

          const user = await authResponse.json();
          console.log('user', user);
          return {
            email: user.id,
            name: user.nickname,
            image: user.image,
            ...user,
          };
        } catch (error) {
          console.error('로그인 에러', error);
        }
      },
    }),
  ],
});

입니다! try-catch문은 에러 확인차 넣어두었고, try-catch 감싸기 이전부터 안되었습니다

.env.local의 AUTH_URL은 아래와 같습니다!

AUTH_URL=http://localhost:9090
이종민님의 프로필 이미지
이종민
질문자

2024. 01. 03. 14:12

.env.local

NEXT_PUBLIC_API_MOCKING=enabled
NEXT_PUBLIC_BASE_URL=http://127.0.0.1:9090
AUTH_URL=http://localhost:9090
NEXT_PUBLIC_MODE=local

.env

AUTH_URL=http://localhost:9090
AUTH_SECRET=mustkeepinsecret

입니다!