개발자

nextauth 를 이용해 springboot 의 jwt를 받아와서 로그인을 구현중입니다.

2023년 10월 25일조회 1,178

안녕하세요. nextauth 를 이용해 로그인 구현중입니다. 흔히 생각하는 소셜 로그인이 아닌 username 과 password를 통해 springboot security 에서 jwt를 반환 받아오려고 합니다. // app/api/auth/[...nextauth]/route.ts CredentialsProvider({ name: 'Credentials', credentials: { username: { label: 'Username', type: 'text', placeholder: '아이디' }, password: { label: 'Password', type: 'password' }, }, async authorize(credentials, req) { const res = await fetch(`${process.env.NEXTAUTH_URL}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: credentials?.username, password: credentials?.password, }), }); const user = await res.json(); console.log(user); if (user) { return user; } else { return null; } }, }), 그런데 위의 코드처럼 코드를 구성했을때 .env.local 파일의 NEXTAUTH_URL 이 등록이 되면 authorize 가 작동하지 않습니다 . 에러 log라도 있으면 어떻게라도 해보겠는데.. 그것도 없습니다. 그래서 NEXTAUTH_URL 를 등록하지 않고 const res = await fetch(`http://localhost:8080/auth`, 바꾸면 이것역시 에러 log 없이 브라우저상에서 Error 라는 문구만 보여줍니다. 이렇게 생각했을때 authorize는 값을 내부에서만 가져올수 있는거 같은데요. 실제로 가상의 const user = {....} 를 만들어서 반환하면 로그인이 아주 잘 됩니다. 하지만 제가 원하는 방법은 아니죠..ㅍ 검색해보면 prisma 가 많이 나오는데.. 그것 또한 시스템상 제가 원하는 방식이 아닙니다. springboot security 에서 jwt를 받아와서 nextauth에 로그인을 할수 있는 방법은 없을까요? custom login 페이지를 만들어서 해야 할거 같은데 방법을 잘 모르겠습니다. 현재 springboot 서버에 cors 설정이 정상적으로 허용된 상태입니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

손우진님의 프로필 사진

공식문서에서 콜백함수 쪽을 확인해보세요. 인증 요청은 저렇게 보낸다고 명세 되어서 요청은 날아갔으나 그 후 발동되는 콜백에 대한 명세가 없어서 아무일도 벌어지지 않는 상황으로 보입니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 10월 25일

문제를 이해하긴 했지만, `NEXTAUTH_URL`이 등록되면 왜 authorize가 작동하지 않는지에 대한 구체적인 정보 혹은 에러 메시지가 없어서 확실한 답변을 드리기는 어렵습니다. 그러나 아래와 같이 몇 가지 시도해 볼만한 방법들을 제안드립니다. 1. 환경 변수의 문제: `.env.local` 파일에 `NEXTAUTH_URL` 환경변수를 설정했다면, 그것이 정확하게 로드되고 있는지 확인해보세요. `process.env.NEXTAUTH_URL`를 다른 부분에서 로깅해봐도 좋을 것 같습니다. 2. CORS 문제: 웹 브라우저에서 다른 도메인(예: localhost)으로 HTTP 요청을 보내면 CORS(Cross-Origin Resource Sharing) 제약으로 인해 오류가 발생할 수 있습니다. Spring Boot 서버에서 CORS 설정을 허용하도록 수정해보세요. Spring Security에는 CORS 관련 설정을 쉽게 추가할 수 있는 기능이 포함되어 있습니다. 3. JWT 공유 문제: JWT 토큰을 Back-end(Spring Boot)에서 Front-end로 보낼 때 보안성이 중요합니다. HTTPS 연결로 암호화된 채널로 전송하는 것이 권장됩니다. 위의 방법들로도 해결되지 않는다면, HTTP 요청의 상태 코드, 응답, 예외 및 서버 측 로그 등에 대한 추가적인 정보가 필요할 것 같습니다. 이를 통해 문제를 좀 더 명확하게 파악하는데 도움이 될 수 있을 겁니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!