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

Be/feature/#458 kakao OAuth #459

Merged
merged 64 commits into from
Jan 12, 2024
Merged

Be/feature/#458 kakao OAuth #459

merged 64 commits into from
Jan 12, 2024

Commits on Jan 9, 2024

  1. Configuration menu
    Copy the full SHA
    1159cf4 View commit details
    Browse the repository at this point in the history
  2. feat: KakaoTokenReqDto

    토큰 발급을 위해 요청 바디에 넣어줘야 하는 필드들을 클래스로 정의
    kimyu0218 committed Jan 9, 2024
    Configuration menu
    Copy the full SHA
    e74a78f View commit details
    Browse the repository at this point in the history
  3. feat: KakaoTokenDto

    토큰을 성공적으로 발급 받았을 때 존재하는 필드들을 클래스로 정의
    kimyu0218 committed Jan 9, 2024
    Configuration menu
    Copy the full SHA
    ba17d51 View commit details
    Browse the repository at this point in the history
  4. feat: KakaoAccount

    - 사용자 정보를 성공적으로 가져왔을 때, kakao_account 안에 들어있는
      정보를 별도의 클래스로 정의
    - 동의항목으로 설정한 필드에 대해서만 작성
    kimyu0218 committed Jan 9, 2024
    Configuration menu
    Copy the full SHA
    9a311c7 View commit details
    Browse the repository at this point in the history
  5. feat: CreateMemberDto

    - 멤버를 생성하는 create() 메서드를 호출할 때 사용하는 dto 정의
    - fromKakao라는 static 메서드를 이용하여 dto를 생성하도록 구현
    kimyu0218 committed Jan 9, 2024
    Configuration menu
    Copy the full SHA
    fd220eb View commit details
    Browse the repository at this point in the history
  6. feat: OAuth REST API 요청 시 필요한 상수 정의

    - METHODS: fetch의 method 필드에 넣어주는 HTTP 메서드값
    - CONTENT_TYPE
    - OAUTH_URL : OAuth REST API URL
    kimyu0218 committed Jan 9, 2024
    Configuration menu
    Copy the full SHA
    d7fc977 View commit details
    Browse the repository at this point in the history

Commits on Jan 10, 2024

  1. feat: Member 엔티티 수정

    - 사용자의 회원가입 여부를 식별하기 위해 email 필드 추가
    - 리프레시 토큰 DB에 저장 (최대 길이가 명시되어 있지 않아 text 타입으로
      설정)
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    f64b2d6 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    c9ffc42 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    d47b90d View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    b2d3d0d View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    fda544e View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    edcba65 View commit details
    Browse the repository at this point in the history
  7. feat: AuthService

    - OAuth를 위한 서비스 정의
    - 멤버 서비스를 주입받아 사용자 create, select, update 작업 수행 가능
    - loginKakao : 인가코드로 카카오 로그인 수행
      - getKakaoToken을 호출하여 액세스 토큰과 리프레시 토큰 발급 받음
      - getOIDCuserInfo를 호출하여 사용자 정보 조회
      - 조회한 사용자 정보를 바탕으로 이미 가입한 회원인지 확인
        - 이미 존재하는 회원인 경우, 리프레시 토큰 갱신
        - 신규 회원인 경우, 회원가입 진행
    - logoutKakao : 카카오 로그아웃 수행
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    abe7557 View commit details
    Browse the repository at this point in the history
  8. feat: AccessTokenDto

    액세스 토큰 값과 만료 시간을 저장하는 객체 정의
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    5e95f74 View commit details
    Browse the repository at this point in the history
  9. feat: AuthController

    - OAuth를 위한 컨트롤러 정의
    - 현재 로그인, 로그아웃만 정의, 추후에 탈퇴 부분 추가 예정
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    0165c53 View commit details
    Browse the repository at this point in the history
  10. feat: AuthModule 추가

    Auth 서비스에서 멤버 서비스를 이용
    -> imports, providers에 멤버 관련 내용 추가
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    1fbef16 View commit details
    Browse the repository at this point in the history
  11. feat: OAuth 관련 에러 메시지 추가

    추후 사용하지 않는 에러 메시지 삭제 예정
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    330b16e View commit details
    Browse the repository at this point in the history
  12. feat: OAuth 관련 url 추가

    추후 사용하지 않는 url 삭제 예정
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    7462f86 View commit details
    Browse the repository at this point in the history
  13. feat: MemberService 메서드 추가

    - findByEmail : 이메일로 사용자 조회
    - updateRefreshToken : 리프레시 토큰 갱신
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    9aacf66 View commit details
    Browse the repository at this point in the history
  14. feat: auth 관련 dto 정의

    - JwtPayloadDto : jwt를 만들 때 들어가는 필드
    - KakaoAccessTokenInfo : 카카오 로그인에서 액세스 토큰에 대한 정보를
      조회할 때 응답 바디
    - KakaoRefreshTokenDto : 카카오 로그인에서 토큰을 갱신할 때 요청 바디
    - RequestKakaoTokenDto : 카카오 로그인에서 토큰을 발급할 때 요청 바디
    - OAuthTokenDto : 추후 구글, 네이버 로그인이 추가되었을 때 사용 예정
      - 플랫폼 별로 static 메서드 구현하여 dto 생성 계획
    - ProfileDto : 기존 서비스에서 조회하여 사용하는 항목
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    c8c8de9 View commit details
    Browse the repository at this point in the history
  15. refactor: providerId 추가 및 이메일 unique 규칙 제거

    - 카카오 계정의 경우, 카카오 메일이 아닌 이메일을 사용할 수 있음
    - 카카오 계정의 메일이 네이버 계정의 메일과 겹칠 수 있기 때문에 유일하지
      않음
    - 대신 providerId를 추가하여 사용자 정보를 제공하는 리소스 서버 코드를
      추가함
    
    ex.  { email: [email protected], providerId: 0 }
         { email: [email protected], providerId: 1 }
         -> 이메일은 같지만 providerId가 다르므로 서로 다른 회원임
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    ec03e92 View commit details
    Browse the repository at this point in the history
  16. feat: UpdateMemberDto 추가

    - 사용자 정보를 갱신할 때 필요한 dto
    - 로그인할 때 조회한 프로필 정보와 DB의 프로필 정보가 다르다면 갱신
      필요 (+ 리프레시 토큰)
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    bddfc1f View commit details
    Browse the repository at this point in the history
  17. feat: providerId 추가

    사용자 레코드 생성 시, 어느 플랫폼의 OAuth를 이용했는지 명시 필요
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    ec92415 View commit details
    Browse the repository at this point in the history
  18. feat: findByEmail 수정

    - 이메일 기준으로 조회하되, 이메일 중복이 있을 수 있으므로
      providerId까지 함께 검색하도록 수정
    - refreshToken만 갱신하지말고 바뀐 사용자 프로필도 갱신하도록 수정
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    41dd95e View commit details
    Browse the repository at this point in the history
  19. chore: @nestjs/jwt 설치

    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    76af80d View commit details
    Browse the repository at this point in the history
  20. Configuration menu
    Copy the full SHA
    acbb235 View commit details
    Browse the repository at this point in the history
  21. feat: OAuth 관련 상수 정의

    - 카카오 로그인 중 발생할 수 있는 에러 메시지 정의
    - 구글, 네이버 등 플랫폼 구분하는 상수 정의
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    8448604 View commit details
    Browse the repository at this point in the history
  22. feat: JwtModule 관련 로직 추가

    AuthService에서 JwtService를 사용할 수 있도록 환경변수 세팅 및 JwtModule
    추가
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    028ee9c View commit details
    Browse the repository at this point in the history
  23. feat: 카카오 OAuth 관련 로직 작성

    - loginKakao : /oauth/login/kakao 요청이 들어왔을 때 실행되는 로직으로,
      인가코드를 바탕으로 토큰을 조회하고, 사용자 프로필을 조회함
      - 이미 가입된 회원이라면 login을 호출하여 사용자 정보 갱신
      - 신규 회원이라면 signup을 호출하여 사용자 정보 추가
    - logout : /oauth/logout이 들어왔을 때 실행되는 로직으로 토큰의 값을
      기준으로 서비스별 로그아웃 수행
      - 현재 verifyToken에 try~catch문 없음 (추후 가드에서 verifyToken을 수행하도록 변경할 예정이므로 수정하지 않음)
    - REST API 호출 시에 발생할 수 있는 에러 처리 추가
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    29c0c77 View commit details
    Browse the repository at this point in the history
  24. feat: AuthController 수정

    - jwt를 쿠키에 부착하도록 구현
      - httpOnly로 XSS 공격 방지
      - prod 환경에서 secure를 사용하여 암호화된 통신 이용하도록 설정
      - sameSite 설정 CSRF 공격 예방
    - logout 추가
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    479dbf7 View commit details
    Browse the repository at this point in the history
  25. refactor: AuthService 리팩토링

    - 현재 카카오 oauth 관련 로직만 있는데도 250줄임
    - OAuth를 제공하는 플랫폼별 서비스를 작성하고, 공통 부분인 AuthService를 상속하여 사용할 예정
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    8f8481b View commit details
    Browse the repository at this point in the history
  26. refactor: KakaoAuthService로 분리

    - 카카오 OAuth 관련 로직만 작성
    - 공통으로 사용하는 함수나 변수는 AuthService를 상속받아 사용
    kimyu0218 committed Jan 10, 2024
    Configuration menu
    Copy the full SHA
    0a8f2cd View commit details
    Browse the repository at this point in the history

Commits on Jan 11, 2024

  1. Configuration menu
    Copy the full SHA
    b39a9e2 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    6711e21 View commit details
    Browse the repository at this point in the history
  3. refactor: 슬랙 웹훅 로직 별도의 파일로 분리

    - makeSlackMessage : 슬랙 메시지 생성
    - 해당 함수를 에러 인터셉터에서 호출하여 사용
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    0881a0d View commit details
    Browse the repository at this point in the history
  4. refactor: 로그 출력 형식 관련 함수 별도의 파일로 분리

    - makeErrorLogMessage : 에러 로그 출력 형식 지정
    - logErrorWithStack : 조금 더 자세한 에러 로그가 필요한 경우 stack도
      함께 출력하도록 구현
    - 해당 함수를 에러 인터셉터에서 호출하여 사용
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    4f268c4 View commit details
    Browse the repository at this point in the history
  5. refactor: util 함수 호출하여 사용하도록 리팩토링

    - 슬랙 웹훅, 로깅 유틸을 호출함으로써 인터셉터의 내부 로직이 간결해짐
    - JwtError에 대한 처리 추가
      - 서버 쪽에 남겨지는 로그는 자세하게 작성
      - 클라이언트 쪽에 전달되는 에러 메시지는 서버 쪽 에러를 유추할 수 없게
        'jwt 검증에 실패했다'는 내용 전달
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    b9c9cc7 View commit details
    Browse the repository at this point in the history
  6. feat: JwtError 커스텀 에러 작성

    JwtError에 대한 별도 처리를 하기 위함
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    5f6ed44 View commit details
    Browse the repository at this point in the history
  7. feat: JWT_ERR 작성 및 자세한 에러 메시지 삭제

    - JwtService.verify 중에 발생할 수 있는 에러를 처리하기 위해 JWT_ERR
      작성
    - 클라이언트 측에 자세한 에러 메시지가 전달되면 보안에 취약해지므로
      서버쪽에서 발생하는 에러 메시지 삭제
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    9b6736b View commit details
    Browse the repository at this point in the history
  8. feat: AuthGuard

    - 로그인에 성공하면 magicconch라는 쿠키를 부착함
    - 해당 쿠키를 검증하여 인증 여부 확인
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    f1ccca9 View commit details
    Browse the repository at this point in the history
  9. feat: PROVIDER_NAME 추가

    OAuth를 지원하는 플랫폼 이름 상수화
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    0a5aff1 View commit details
    Browse the repository at this point in the history
  10. feat: AuthController 쿠키 부착

    - 로그인에 성공한 경우, magicconch라는 쿠키 부착하도록 설정
    - 로그아웃 시 가장 먼저 AuthGuard를 통해 인증 여부 확인
    - req에 붙은 user 값을 바탕으로 어느 OAuth를 로그아웃 해야하는지 판단
    - OAuth 로그아웃에 성공하면 서비스 로그아웃 처리
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    39b7292 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    c6d9202 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    11ddb63 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    5b9fb2a View commit details
    Browse the repository at this point in the history
  14. feat: CacheConfigModule 작성

    redis를 이용하는 CacheConfigModule
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    46bd048 View commit details
    Browse the repository at this point in the history
  15. feat: CacheKey 인터페이스 작성

    redis의 키를 위한 인터페이스 작성
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    94c3789 View commit details
    Browse the repository at this point in the history
  16. refactor: refreshToken 필드 제거

    redis에 refresh token을 저장하기 때문에 더 이상 데이터베이스의 refresh
    token을 저장할 필요가 없음
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    ed5ab7c View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    ad9d404 View commit details
    Browse the repository at this point in the history
  18. feat: CacheConfigModule 추가

    auth 서비스에서 캐시 사용할 수 있도록 import
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    cc2e81e View commit details
    Browse the repository at this point in the history
  19. refactor: cache 추가 및 그에 따른 로그아웃 로직 수정

    - 로그아웃 요청 시, access token이 만료되는 경우가 발생할 수 있음
    - 데이터베이스에서 refresh token을 조회하는 대신, 캐시에서 조회하도록
      변경
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    cb857bb View commit details
    Browse the repository at this point in the history
  20. feat: auth 모듈 추가

    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    dba5782 View commit details
    Browse the repository at this point in the history
  21. refactor: JwtModule 여러 모듈에서 공통 사용하도록 설정

    - AppModule에서 registerAsync()로 JwtModule 등록
    - ChatModule이나 AuthModule에서는 registerAsync() 없이 JwtModule만
      import 하여 사용
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    e1f157f View commit details
    Browse the repository at this point in the history
  22. refactor: cache 추가 및 그에 따른 인증 로직 수정

    email과 providerId를 key로 하여 refresh token 저장
    kimyu0218 committed Jan 11, 2024
    Configuration menu
    Copy the full SHA
    11b2738 View commit details
    Browse the repository at this point in the history
  23. Configuration menu
    Copy the full SHA
    11d983f View commit details
    Browse the repository at this point in the history

Commits on Jan 12, 2024

  1. fix: sameSite 설정값 변경 (strict -> lax)

    - sameSite 옵션은 쿠키를 어떤 상황에서 전송해야 하는지 제어하는 옵션
    - strict는 동일한 도메인에서만 쿠키 전송 가능
    - lax는 외부 도메인의 GET 요청에 대해서만 쿠키 전송 가능
    - 프론트엔드의 도메인과 백엔드의 도메인이 다르기 때문에 lax를 붙여줘야
      함
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    eac11a0 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    75dcb4b View commit details
    Browse the repository at this point in the history
  3. feat: 카카오 로그인에 필요한 util 함수 정의

    application/x-www-form-urlencoded 요청을 보낼 때는 URLSearchParams
    형태의 body를 보내줘야 함
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    f6a416a View commit details
    Browse the repository at this point in the history
  4. refactor: static 메서드 변경

    - OIDC 사용자 정보 조회 API가 동작하지 않아서 사용자 조회 API로 변경함
    - 이에 따라 응답 바디가 변경되어 사용자 API에 맞게 적절하게 수정함
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    1ffae01 View commit details
    Browse the repository at this point in the history
  5. fix: param -> query

    - 인가 코드를 파라미터에 저장하는 줄 알았으나 쿼리 파라미터였음
    - param 대신 query를 이용하도록 수정함
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    e5e9912 View commit details
    Browse the repository at this point in the history
  6. fix: @InjectRepository() 데코레이터 제거

    서비스 앞에 붙은 @InjectRespository() 제거
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    952cd04 View commit details
    Browse the repository at this point in the history
  7. fix: 카카오 로그인 API 테스트 중 발견한 버그 수정

    - application/x-www-form-urlencoded 사용 시, 문자열이 아니라
      URLSearchParams 형태로 전송해야 함
      -> JSON.stringify() 대신 URLSearchParams를 넣어주도록 변경
    - OIDC 사용자 정보 조회가 동작하지 않아 사용자 정보 조회를 이용하도록
      변경
    - 헤더 설정 중에 발견한 오타 수정
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    da611bb View commit details
    Browse the repository at this point in the history
  8. feat: JwtConfigModule

    - JwtModule을 동적으로 로드하도록 도와주는 모듈
    - @global() 데코레이터를 이용하여 전역으로 사용할 수 있도록 설정
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    7cd573d View commit details
    Browse the repository at this point in the history
  9. fix: JwtModule 전역으로 사용하도록 수정

    - 수정 전에는 @global() 데코레이터를 사용하지 않아 전역으로 사용되지
      않았음
    - 최상위 모듈에 JwtConfigModule을 가져오도록 수정하면 다른 모듈에서는
      JwtConfigModule을 가져오지 않아도 에러가 발생하지 않음
    kimyu0218 committed Jan 12, 2024
    Configuration menu
    Copy the full SHA
    f5f6419 View commit details
    Browse the repository at this point in the history