강의

멘토링

커뮤니티

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

개미님의 프로필 이미지
개미

작성한 질문수

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

next-auth로 로그인하기

Auth.js 사용 시 authorize 함수가 호출되지 않습니다

해결된 질문

작성

·

102

·

수정됨

0

안녕하세요. 먼저, Next.js 를 입문한지 얼마 되지 않아 질문이 서툴 수 있는 점 양해 부탁드립니다..!

현재 msw 세팅을 완료 했고, Auth.js는 공식문서를 참고하여 5버전과 동일하게 auth.ts 파일을 아래와 같이 작성하였습니다.

// auth.ts
import NextAuth from "next-auth";
import Credentials from "next-auth/providers/credentials";

export const { handlers, signIn, signOut, auth } = NextAuth({
  pages: {
    signIn: "/i/flow/login",
    newUser: "/i/flow/signup",
  },
  providers: [
    Credentials({
      authorize: async (credentials) => {
        const response = await fetch(
          `${process.env.NEXT_PUBLIC_BASE_URL}/api/login`,
          {
            method: "POST",
            body: JSON.stringify({
              username: credentials.username,
              password: credentials.password,
            }),
            headers: { "Content-Type": "application/json" },
          },
        );
        if (!response.ok) {
          return null;
        }
        const user = await response.json();

        console.log("로그인 정보", user);

        return {
          id: user.id,
          name: user.nickname,
          image: user.image,
          ...user,
        };
      },
    }),
  ],
});
// @modal/(.)/i/flow/login/page.tsx 
 
const onLogin = async () => {
    try {
      await signIn("credentials", {
        username: id,
        password,
        redirect: false,
      });
      router.replace("/home");
    } catch (err) {
      console.error(err);
      setMessage("아이디와 비밀번호가 일치하지 않습니다.");
    }
  };

문제는 authorize 함수 내 콘솔이 찍히지 않는 것으로 보아, 해당 함수가 아예 실행되지 않는 것 같습니다.

회원가입하지 않은 아이디와 비밀번호를 입력해도 로그인이 되고 /home 으로 이동합니다. home으로 이동 후 session 응답 값은 null이고 쿠키에도 auth 토큰이 저장되지 않습니다.

그리고 터미널에는 첫번째 이미지 처럼 에러 메세지가 뜨고, 브라우저 콘솔에는 두번째 이미지와 같은 메세지가 뜹니다.

스크린샷 2025-07-04 오후 1.42.16.png.webp스크린샷 2025-07-04 오후 1.43.03.png.webp

 

// handlers.ts
  
http.post(`${baseUrl}/api/login`, () => {
    console.log("로그인");
    return HttpResponse.json(User[1], {
      headers: {
        "Set-Cookie": "connect.sid=msw-cookie; HttpOnly; Path=/",
      },
    });
  }),

현재는 MSW가 요청을 제대로 가로채지 못하고 있는 것 같다는 의심이 드는데, 어디를 우선적으로 점검해야 할지 잘 모르겠습니다..
초보라 부족한 점이 많지만, 방향을 잡을 수 있도록 힌트나 조언 주시면 정말 감사하겠습니다 ㅠㅠ

답변 2

0

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

일단 authorize 함수 실행 여부 체크 방식이 잘못되었습니다. await fetch 위에 콘솔을 찍어서 authorize 함수가 실행되나를 확인해보셔야 합니다. 또한 process.env.NEXT_PUBLIC_BASE_URL도 잘 나오나 확인해보셔야 합니다.

참고로 브라우저 에러는 에러가 아니라 경고입니다. 에러는 빨간색, 경고는 노란색입니다.

개미님의 프로필 이미지
개미
질문자

빠른 답변 감사합니다!

console.log("authorize 함수 실행");
console.log("credentials:", credentials);
console.log("BASE_URL:", process.env.NEXT_PUBLIC_BASE_URL);

넣어서 콘솔에 확인해 보니 아래와 같이 뜹니다.

 

authorize 함수 실행

credentials: {

username: 'zero1234',

password: 'zero1234',

csrfToken: '7ec6ada60788a973ff6628b3eddaa6c475aeff65449e901d3a4879dede346c54',

callbackUrl: 'http://localhost:3000/i/flow/login'

}

BASE_URL: http://localhost:3000

 

제가 또 놓친 부분이 있을까요?

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

Handlers.ts의 로그인은 콘솔에 안 찍히나요? 안 찍힌다면 서버쪽 msw 연결 잘 하셨는지 확인도 필요합니다

개미님의 프로필 이미지
개미
질문자

Handlers.ts 의 로그인 콘솔은 찍히지 않습니다. 다른 경로도 마찬가지구요. 이 부분에서 진도가 나가지 않아 어렵네요 ㅠㅠ

msw 연결 부분을 재확인해보겠습니다. 도움 주셔서 감사합니다!

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

제 깃헙 코드와 한 번 비교해보시겠어요?

개미님의 프로필 이미지
개미
질문자

강사님 코드 보고 해결했습니다..!

제가 서버 환경 체크에서 "node.js" 로 작성했었네요. 코드 보고도 다 똑같이 작성했다고 생각했는데 저의 불찰이었습니다..

도움 주셔서 정말 감사합니다 ㅠㅠ

if (
  process.env.NEXT_RUNTIME === "node.js" && 
  process.env.NODE_ENV !== "production"
) {

0

안녕하세요, 인프런 AI 인턴입니다.

경민님의 질문에 대해 여러 가능성을 고려해보았습니다. NextAuth.js와 MSW (Mock Service Worker)를 사용할 때 발생할 수 있는 몇 가지 일반적인 문제점과 그 해결 방법에 대해 설명드리겠습니다.

문제 분석 및 해결 방법

  1. 요청 경로 확인:

    • authorize 함수가 실행되지 않는 것은 요청이 올바른 API 엔드포인트로 전송되지 않기 때문일 수 있습니다. process.env.NEXT_PUBLIC_BASE_URL 이 설정된 대로 실제 서버가 작동 중인지 확인해 보세요.
    • console.log(process.env.NEXT_PUBLIC_BASE_URL)를 통해 환경 변수가 정확히 로드되고 있는지 체크해 보세요.
  2. MSW 설정 확인:

    • MSW가 요청을 가로채지 못한다면, 설정 파일이 제대로 구성되어 있는지 확인해야 합니다. MSW의 핸들러가 로그인 시도 관련 API 엔드포인트를 제대로 가로채고 있는지 handlers.js 파일에서 확인해 보세요.
    • 필요한 핸들러를 추가하지 않았을 경우, api/auth/session과 같은 경로에 대한 핸들러를 추가해야 할 수도 있습니다.
  3. 환경 변수 설정:

    • .env 파일이 프로젝트 최상위 디렉토리(ex. package.json 파일이 존재하는 곳)에 있는지 확인하고, NEXT_PUBLIC_BASE_URL이 올바르게 설정되어 있는지 검토하세요. 또한 환경 변화를 적용하기 위해 서버를 재시작했는지도 확인하세요.
  4. 사소한 코드 오류 확인:

    • 코드의 사소한 오타나 잘못된 모듈 import 또한 이런 문제를 일으킬 수 있습니다. 코드를 다시 찬찬히 검토해 주시길 바랍니다.
    • 특히 credentials의 키 값(username, password)이 정확한지 확인하세요.
  5. 권한 정책 누락:

    • credentials 프로바이더를 설정할 때 credentials 속성을 추가해야 할 수도 있습니다.
      
      credentials: {
      username: { label: "Username", type: "text" },
      password: { label: "Password", type: "password" }
      }
      

유사한 기존 답변 및 자료

질문 내용에 포함된 링크와 이미지가 문제 해결에 도움이 될 수 있습니다. 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 궁금증을 해결할 수 있도록 도와드리겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

개미님의 프로필 이미지
개미

작성한 질문수

질문하기