-
Notifications
You must be signed in to change notification settings - Fork 1
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
인증 기능 구현 #46
Merged
Merged
인증 기능 구현 #46
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
인증 기능(로그인) 구현에 필요한 Spring Security와 JWT 의존성을 추가했다.
개행을 넣어서 로그를 출력하니 오히려 보기 어려워졌다. 때문에 error 정보임을 더 명확히 알 수 있도록 로그 출력 내용을 수정하였음.
다만, jwt secret key는 민감 보안 정보이므로 외부에 공개하면 안된다. 때문에 환경 변수를 통해 외부에서 주입받도록 하여 보안 정보를 감추었다. Jwt secret key 값은 팀 내 문서를 참고할 것
Spring Security 추가 후 서비스에 필요한 설정들을 추가해주었다. 현재 코드에 아직 구현되지 않은 JWT 관련 코드들이 있지만, 일단 그냥 commit 하도록 한다. 다음부터는 주의해서 commit 해야 할 필요 있음.
Service layer의 method는 controller layer 이외에도 다른 곳에서 사용할 가능성이 있다. 이를 고려하여 설명을 자연스럽게 수정하였음. 또한 `MemberDto`에 대한 link를 추가하여 method 명세에서 해당 class를 바로 확인할 수 있도록 하였음.
1. `Member` domain 수정 - 회원가입 로직 상 카카오 로그인/회원가입이 우선 처리된 후에 폰번호와 주소를 입력받아야 함. 이에 따라 address와 phoneNumber를 nullable로 설정 - 카카오 비즈니스 권한 상 출생년도를 받을 수 없어 연령대로 수정하였음. - Spring Security 기능에 필요하여 역할 속성을 추가하였음. - 이에 따라 MemberDto도 적절히 수정하였음. 2. `MemberDto` 내부의 주소를 `Address`가 아닌 `AddressDto`로 변경. - 현재 open session in view 설정을 껐기 때문에, controller layer에서 lazy loading이 되지 않는다. 지금 당장은 문제가 되지 않지만 버그가 발생할 여지가 있기 때문에, Dto 내부의 필드에는 entity를 넣지 않는 것이 바람직해 보인다. 3. `UserDetailsService`, `UserDetails`의 구현체 작성 - 인증 기능 구현에 필요한 Spring Security interface의 구현체를 작성하였다. Username은 이메일로, password는 각 OAuth 플랫폼의 고유 번호로 사용하려고 한다. 4. JWT 기반 로그인, 회원가입 business logic 구현 5. JWT 인증 filter 적용 - 인증 기능이 필요한 api에 JWT 검증 로직을 추가한다.
ccbc43c 에서 기존에 nickname을 기반으로 회원을 조회하던 method와 새로이 email을 기반으로 회원을 조회하는 method의 이름 통일성을 고려하여 변경하였다. 일반적으로 get은 이미 존재한다는 가정하에 조회할 때 많이 사용하는 표현이므로 find로 사용하였음.
- Kakao API server에 access token을 전송하여 회원 정보를 받아온 후, 서비스 내에서 로그인/회원가입 로직을 처리하는 web layer 기능 구현. - 이제 대부분의 기능들은 로그인이 필요하기 때문에 Swagger에서도 access token을 header에 설정하여 테스트 해볼 수 있도록 Swagger 설정을 추가하였음.
생성자, 수정자는 로그인을 한, 요청을 보낸 회원의 PK(id)를 기입하여 등록되도록 한다.
이 test는 Spring Data JPA가 만들어주는 기능에 대한 test이므로 굳이 필요하지 않다. 때문에 disabled 처리하였음.
Closed
13 tasks
현재 |
로그인하지 않은 상황에서 `Authentication.getPrincipal()`을 사용하면 "anonymousUser"라는 String이 반환된다. 이 경우, `WithMeAppPrinciple`로 casting 할 수 없어 `ClassCastException`이 발생한다. 이 때문에 `Optional.empty()`를 반환하도록 구현.
107ed50 로 버그 수정하였음 |
hyeonnkang
approved these changes
Jan 23, 2023
이 경우 발생한 exception이 외부로 던져지지 않고 catch와 `return Optional.empty()`로 인해 처리되고 있다. 따라서 error보다는 warn으로 logging level을 변경하여 주의사항으로만 인지할 수 있도록 하는 것이 좋다고 판단하였음.
sujeong11
approved these changes
Jan 24, 2023
Wo-ogie
force-pushed
the
feature/#29-kakao-login
branch
from
January 24, 2023 12:11
b2e8e4c
to
fbc2917
Compare
#27 에서 추가했던 base response에 간단하게 Swagger 명세를 작성하였다.
…ss-setup 회원가입 추가 로직 구현 (폰 번호, 지역 설정)
Wo-ogie
force-pushed
the
feature/#29-kakao-login
branch
from
January 24, 2023 15:55
c3e472f
to
2a5dbac
Compare
dldmldlsy
approved these changes
Jan 25, 2023
Access token이 만료되는 등의 이유로 kakao와의 통신에 실패한 경우, 사용자에게 카카오 서버 통신 문제라는 것을 응답하기 위해 try-catch로 예외처리하는 로직을 추가하였음.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
작업 사항
JWT_SECRET_KEY
는 보안 상 민감한 정보이므로 환경변수 설정으로 주입받아서 사용해야 함.UserDetailsService
,UserDetails
의 구현체 작성Member
domain spec 수정address
와phoneNumber
를 nullable로 설정.RoleType
) 속성을 추가하였음.MemberDto
내부의 주소를Address
가 아닌AddressDto
로 변경.Authorization = Bearer 액세스토큰
)@Parameter(hidden = true) @AuthenticationPrincipal WithMeAppPrinciple principle
를 api method의 parameter로 추가하면 된다.principle.getUsername()
으로 로그인 사용자의 이메일을 받아올 수 있다.@Parameter(hidden = true)
는 Swagger 명세에 표시하고 싶지 않은 parameter를 감추기 위한 annotation임.@Operation(security = @SecurityRequirement(name = "access-token"))
를 붙여주어야 함.참고 자료
체크리스트
main
branch에 실수로 PR 생성 금지)