Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#5: 카카오 로그인 구현 #8

Merged
merged 9 commits into from
Dec 29, 2024
Merged

Conversation

minjeongss
Copy link
Member

@minjeongss minjeongss commented Dec 28, 2024

#️⃣ 연관된 이슈

#7

📝 작업 내용

  • auth 기본 구조 구성
    • jwt, session 관리
    • 보안 관리
  • 카카오 로그인 구현
  • 로그인 페이지에서 카카오 로그인의 accessToken 확인

📸 스크린샷

로그인 전 카카오 로그인 입장 카카오 로그인 최종 로그인 후
image image image image

💬 리뷰 요구사항

구현 완료한 사항

  • auth의 providers. callbacks에 대한 설정을 완료했습니다.
    • 보안에 대한 추가적인 설정이 필요하다면 알려주세요!
    • jwt, session에서 추가적인 등록이 필요하다면 알려주세요! (현재 accessToken, refreshToken 등록중)
  • 로그인 페이지에서 accessToken(jwt) 접근이 가능합니다.

추가 구현에 인지해야 하는 사항

클라이언트에서 카카오 로그인 > accessToken 접근까지 완료했습니다. 이전에 논의한 백엔드에서 발급하는 jwt 토큰 발급 및 db에 저장된 사용자 정보 활용 방법을 찾아봤는데, 다음처럼 진행하면 될 것 같습니다.

프론트엔드

  1. 클라이언트에서 카카오 로그인 성공
  2. NextAuth가 카카오 access token을 받음
  3. 카카오 토큰을 Spring Boot 백엔드로 전송
const getBackendToken = async () => {
  const response = await fetch('/api/auth/token', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${session?.accessToken}` // 카카오 토큰
    }
  });
  const { token } = await response.json(); // 백엔드 JWT 받기
  return token;
};

백엔드

  1. 카카오 토큰으로 사용자 정보를 확인
  2. DB에서 해당 사용자 조회 (없으면 새로 생성)
  3. 백엔드만의 JWT 토큰 생성 (사용자 권한, ID 등 포함)
  4. JWT 토큰을 클라이언트에 반환

프론트엔드

  1. 모든 API 통신은 백엔드가 발급한 JWT로 진행

@minjeongss minjeongss self-assigned this Dec 28, 2024
Comment on lines +4 to +32
const authOptions: NextAuthOptions = {
providers: [
KakaoProvider({
clientId: process.env.KAKAO_CLIENT_ID as string,
clientSecret: process.env.KAKAO_CLIENT_SECRET as string,
}),
],
session: {
strategy: 'jwt', //JWT 기반 인증
maxAge: 24 * 60 * 60, // 24시간
},
secret: process.env.NEXTAUTH_SECRET, //JWT 암호화 키 설정
callbacks: {
async signIn({ user }) {
return !!user.email;
},
async jwt({ token, account }) {
if (account) {
token.accessToken = account.access_token;
token.refreshToken = account.refresh_token;
}
return token;
},
async session({ session, token }) {
session.accessToken = token.accessToken as string;
return session;
},
},
};
Copy link
Member Author

@minjeongss minjeongss Dec 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • providers: 카카오만 등록되어 있고, 이곳에 애플을 등록하시면 됩니다.
  • session, secret: jwt관련 설정
  • callbacks
    • jwt: token 등록
    • session: session 등록
    • signIn: user의 email이 없다면 로그인에 실패하도록 설정했습니다. (저희는 email로 구분을 하니까요!)

auth에 대한 구조를 위와 같이 구성했습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

구조 확인했어요 ! 정리해주신덕에 조금은 수월하게 작업하지 않을까 싶네요 !
구분자 == 이메일 잊지않고 마저 로그인 구현하겠습니다아 🤍

Comment on lines +6 to +8
const LoginPage = () => {
const { data: session } = useSession();
console.log(session?.accessToken);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useSession을 통해 accessToken에 접근 가능합니다.

Copy link
Contributor

@aaahyesu aaahyesu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전반적으로 차근히 훑어봤는데 꼼꼼하게 잘 해주신 것 같네요!
마저 애플로그인 관련 작업하면서 논의 필요한 부분은 바로바로 말씀드릴게요 👍

@aaahyesu aaahyesu merged commit 3247b7a into develop Dec 29, 2024
@aaahyesu aaahyesu deleted the feature/#5-login-kakao branch December 29, 2024 13:56
@minjeongss minjeongss changed the title Feature/#5: 카카오 로그인 구현 Feat/#5: 카카오 로그인 구현 Dec 30, 2024
minjeongss pushed a commit to minjeongss/Urdego_Frontend_Deploy that referenced this pull request Dec 30, 2024
…feat/login-logo-ui-feature

Feature/urdego#8: 로그인 UI로고 컴포넌트 구현, import 절대경로 세팅, 글로벌 컬러 세팅
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants