인프런 커뮤니티 질문&답변
next-auth의 ClientFetchError 에러가 발생했습니다.
작성
·
1.7K
·
수정됨
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

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

 처음 페이지에서부터 저 오류가 나오고
처음 페이지에서부터 저 오류가 나오고 로그인한 후에 메인화면으로 넘어가긴 하는데 세션 정보를 못 불러와서 아래 로그아웃 버튼과 트렌드쪽에서 저렇게 나옵니다.
로그인한 후에 메인화면으로 넘어가긴 하는데 세션 정보를 못 불러와서 아래 로그아웃 버튼과 트렌드쪽에서 저렇게 나옵니다.
그런데 로그인한 직후에 cookie 보니깐 잘 들어가 있는 것 같아요
그러면 useSession에서 뭔가를 잘못받아오는 것 같다는 생각이 듭니다...ㅜㅜ

강의 깃헙 ch3-1, ch3-2 모두 해봤는데 잘 됩니다.
네트워크 탭에서 localhost:3000/api/auth/session 요청 보내는 것 있는지 확인해보세요. 그게 useSession() 데이터 가져오는 겁니다.
0

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

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
.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입니다!







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