Skip to content

Conversation

@min0962
Copy link
Collaborator

@min0962 min0962 commented Aug 22, 2025

✨ 설명

1. (작업 파일)

(작업한 파일명 작성)
security/AuthController
security/AuthService
token/AuthTokenResponse
token/JwtConfiguration
token/JwtMemberInfo
token/JwtTokenProvider
token/JwtUtils
token/LoginResponse
token/TokenBody
token/TokenPair

2. (작업 내용 요약)

(작업한 부분 설명 및 코드와 이미지 첨부)

  • 카카오 로그인 (비회원도 크게 다르지 않음)
    @Transactional
    public LoginResponse kakaoLogin(String code) {
        String accessToken = getAccessToken(code);
        KakaoUserResponse kakaoUser = getUserInfo(accessToken);

        Member member = memberRepository.findByEmail(kakaoUser.email())
            .orElseGet(() -> memberRepository.save(MemberMapper.toNewKakaoMember(kakaoUser)));
// 위 코드 까진 기존 코드와 동일

        // accessToken, refreshToken 생성
        TokenPair tokenPair = jwtTokenProvider.generateTokenPair(
            new JwtMemberInfo(member.getId(), member.getNickname(), member.getMemberType()));

        // 필요정보 담아서 반환
        AuthTokenResponse authTokenResponse = new AuthTokenResponse(tokenPair.accessToken(),
            tokenPair.accessTokenExpiresIn(), member.getId(),
            member.getNickname(), member.getMemberType());

        return new LoginResponse(authTokenResponse, tokenPair.refreshToken(),
            tokenPair.refreshTokenExpiresIn());
    }
    @PostMapping("/kakao")
    @ResponseStatus(HttpStatus.OK)
    public Map<String, AuthTokenResponse> kakaoLogin(
        @RequestBody KakaoLoginRequest kakaoLoginRequest,
        HttpServletResponse response
    ) {
        LoginResponse loginResponse = authService.kakaoLogin(kakaoLoginRequest.code());

        String refreshToken = loginResponse.refreshToken();

        // refreshToken을 httpOnly 쿠키로 내려줌
        JwtUtils.addRefreshTokenCookie(response, refreshToken,
            loginResponse.refreshTokenExpiresIn());

        return Map.of("token", loginResponse.authTokenResponse());
    }

카카오 로그인 토큰 확인

  • 현재 로그인 과정이 백엔드에서 온전히 진행·반환되는 구조가 아니라, 프론트에서 로그인 후 인가 코드를 받아 백엔드에 요청하는 형식입니다. 구조를 변경하지 않기 위해 프론트를 실행해서 진행했습니다(프론트 리포 브랜치: local, clone 후 실행, 포트 5173).
  • 로그인하시면 콘솔에 access 토큰, 쿠키에 refresh 토큰이 저장되어 이걸로 사용하면 될 것 같습니다. 더 좋은 방법이 있다면 말씀해주세요..!
image image
  • Postman test (비회원 토큰 확인)
image image

application.yml에 추가

  • 시간은 임의로 한거라 변경하셔도 됩니다.
  • (카카오 로그인 관련 id, secret, redirecr-url은 새로 만들었지만 기존거 사용해도 동작합니다. 안될시 연락주세요.)
jwt:
  secret: aK(}K~L7>&oVTu]1$50CVb@4Mmf1Z:hfzF3A(CQ4MuB&R`O&R.?/`N)e@fViYmh
  access-token-expiration: 3600000
  refresh-token-expiration: 1209600000

💬 리뷰

  • 이제 JWT 인증 필터, 액세스 토큰 만료됐을 때 새로 발급받는 재발급 API랑, 리프레시토큰 관련 저장?(db or redis 등) 검증? 등등.. 이 남은 것 같습니다.

@min0962 min0962 linked an issue Aug 22, 2025 that may be closed by this pull request
@min0962 min0962 merged commit 1cb0fde into dev Aug 26, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feat: JWT 기반 로그인

3 participants