인프런 커뮤니티 질문&답변
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 토큰이 저장되지 않습니다.
그리고 터미널에는 첫번째 이미지 처럼 에러 메세지가 뜨고, 브라우저 콘솔에는 두번째 이미지와 같은 메세지가 뜹니다.


// 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도 잘 나오나 확인해보셔야 합니다.
참고로 브라우저 에러는 에러가 아니라 경고입니다. 에러는 빨간색, 경고는 노란색입니다.
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)를 사용할 때 발생할 수 있는 몇 가지 일반적인 문제점과 그 해결 방법에 대해 설명드리겠습니다.
문제 분석 및 해결 방법
요청 경로 확인:
authorize함수가 실행되지 않는 것은 요청이 올바른 API 엔드포인트로 전송되지 않기 때문일 수 있습니다.process.env.NEXT_PUBLIC_BASE_URL이 설정된 대로 실제 서버가 작동 중인지 확인해 보세요.
console.log(process.env.NEXT_PUBLIC_BASE_URL)를 통해 환경 변수가 정확히 로드되고 있는지 체크해 보세요.
MSW 설정 확인:
- MSW가 요청을 가로채지 못한다면, 설정 파일이 제대로 구성되어 있는지 확인해야 합니다. MSW의 핸들러가 로그인 시도 관련 API 엔드포인트를 제대로 가로채고 있는지
handlers.js파일에서 확인해 보세요.
- 필요한 핸들러를 추가하지 않았을 경우,
api/auth/session과 같은 경로에 대한 핸들러를 추가해야 할 수도 있습니다.
- MSW가 요청을 가로채지 못한다면, 설정 파일이 제대로 구성되어 있는지 확인해야 합니다. MSW의 핸들러가 로그인 시도 관련 API 엔드포인트를 제대로 가로채고 있는지
환경 변수 설정:
.env파일이 프로젝트 최상위 디렉토리(ex. package.json 파일이 존재하는 곳)에 있는지 확인하고,NEXT_PUBLIC_BASE_URL이 올바르게 설정되어 있는지 검토하세요. 또한 환경 변화를 적용하기 위해 서버를 재시작했는지도 확인하세요.
사소한 코드 오류 확인:
- 코드의 사소한 오타나 잘못된 모듈 import 또한 이런 문제를 일으킬 수 있습니다. 코드를 다시 찬찬히 검토해 주시길 바랍니다.
- 특히
credentials의 키 값(username,password)이 정확한지 확인하세요.
- 코드의 사소한 오타나 잘못된 모듈 import 또한 이런 문제를 일으킬 수 있습니다. 코드를 다시 찬찬히 검토해 주시길 바랍니다.
권한 정책 누락:
credentials프로바이더를 설정할 때credentials속성을 추가해야 할 수도 있습니다.
credentials: { username: { label: "Username", type: "text" }, password: { label: "Password", type: "password" } }
유사한 기존 답변 및 자료
- next-auth 사용 로그인 관련 질문
- next-auth Login 시 middleware 이슈 질문 드립니다.
위 링크들은 비슷한 문제를 이미 겪었던 분들의 질문으로, 강사님의 답변을 통해 어떤 점을 주의해야 하는지 확인할 수 있습니다.
질문 내용에 포함된 링크와 이미지가 문제 해결에 도움이 될 수 있습니다. 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 궁금증을 해결할 수 있도록 도와드리겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






빠른 답변 감사합니다!
넣어서 콘솔에 확인해 보니 아래와 같이 뜹니다.
authorize 함수 실행
credentials: {
username: 'zero1234',
password: 'zero1234',
csrfToken: '7ec6ada60788a973ff6628b3eddaa6c475aeff65449e901d3a4879dede346c54',
callbackUrl: 'http://localhost:3000/i/flow/login'
}
BASE_URL: http://localhost:3000
제가 또 놓친 부분이 있을까요?