-
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
#510 [feat] 인가 로직 개편 작업 #513
Conversation
토큰이 <글모임 ID, 권한>을 Map으로 가지고 있을 수 있게 사전 작업을 진행했습니다. Test가 계속해서 통과하게 수정했습니다.
헤더에서 유저 정보를 빼오는 작업은 Bearer을 제외하고 빼오는 것이 포함되기 때문에 메서드명을 직관적으로 변경했습니다
기존 테스트 로직이 이상해서 테스트가 깨졌던 것 이라 수정했습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM .. 👍 기존에 비해서 코드 중복도 사라지고 확장성에도 좋고 훨씬 발전된 방식이라 좋은 것 같습니다! 작업 하느라 고생하셨습니다!
그런데 궁금한 부분이 있는데 글모임 탈퇴 시 토큰 업데이트에 대해서 "글모임을 탈퇴시킨 사용자를 대상으로 이후 첫번째 요청에 토큰을 검사하여 토큰을 재발급해주어도 좋을 것 같습니다!" 라고 하셨는데, 탈퇴 이후 첫번째 요청인지는 어떻게 판단하나요?? 탈퇴 즉시 토큰을 재발급하는 것과 어떤 차이가 있는지 궁금합니다!
public Map<Long, MoimRole> getJoinedRoleFromUserId(final Long userId) { | ||
return writerNameRepository.findAllByWriterId(userId).stream().collect( | ||
Collectors.toMap(writerName -> writerName.getMoim().getId(), this::getWriterNameMoimRole) | ||
); | ||
} | ||
|
||
private MoimRole getWriterNameMoimRole(final WriterName writerName) { | ||
return writerName.getMoim().getOwner().equals(writerName) ? MoimRole.OWNER : MoimRole.WRITER; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P5) 이 부분에서 OWNER이 아니면 WRITER라고 본다면 비회원의 경우 예외가 발생할 수 있지 않을까요?? MOIM ROLE에 NON_MEMBER를 추가하는 것은 어떤지 궁금합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 헷갈려서 질문 드립니다!! 해당 메서드는 userId기반으로 writername을 찾고, 이를 기반으로 토큰을 발급하기 위한 메서드 입니다! 그래서, userId로 writerName을 찾고 해당 필명프로필이 모임장인지, 모임장이 아닌지 확인하는 플로우인데요! 그래서 비회원인 경우는 필명 프로필 조회에서 조회가 되지 않을 것 같은데, 혹시 이 플로우에서 비회원인 경우를 정의해놓지 않아 예외가 발생할 수 있을까요?? MoimRole에 비회원인 경우는 USER로 판단하는 변수가 존재하기는 합니다..!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
생각해보니 일단 필명이 존재하는 이상은 모임장이거나/ 모임장이 아닌 필명이거나 두가지의 경우의 수밖에 없어서 예외가 발생할 경우가 없을것같네요! 헷갈렸는데 감사합니다😅
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
별도로 권한 확인해야 하는 작업이 사라지니.. 너무 깔끔하고 좋네요..
@parkheeddong 위에 질문 주신 회원의 글모임 탈퇴시 플로우에 대한 의견 드립니다! 현재 글모임 회원 본인이 모임을 탈퇴하는 플로우는 없고, 탈퇴를 시키는 플로우만 있어서 고민이 되는 상황입니다🤔 |
그러네요! 직접 탈퇴인 경우와 탈퇴시키는 경우 모두 동일한 방식으로 토큰을 재발급한다고 가정할 때 탈퇴 이후 첫 요청시 재발급을 하게 되면 탈퇴 플래그와 같은 추가적인 설정이 필요한 것인지 궁금했습니다! 다만 즉시 재발급을 하는 경우에는 불필요한 토큰 재발급이 이뤄질 수도 있겠네요.. |
Type 추론이 명확하게 필요해서 JwtTokenProvider에서 명확한 타입 제공하였습니다!
스레드 로컬의 메모리 누수가 발생하지 않게 afterCompletion 후 clear 해주었습니다.
✒️ 관련 이슈번호
Key Changes 🔑
컨트롤러 메서드 상단의 어노테이션을 통해 인가를 구분하고 Interceptor에서 처리하는 방식으로 진행했습니다! 아래가 상세이니 읽어주시면 감사하겠습니다🙇🏻♀️
기존에는 글모임장인 경우, 글모임의 단순 회원인 경우, 이 둘의 인증이 필요하지 않은 경우, 토큰이 필요하지 않은 경우 모두 잘 구분이 되지 않는 상황이었는데 컨트롤러에서 이를 깔끔하게 구분할 수 있게 유도하면 좋을 것 같아 어노테이션을 도입했습니다! (인터셉터를 여러개 정의하고 WebConfig에서 나누는 것 보다는 어노테이션을 통해 인터셉터에서 나누는 것이 확장성 측면에서 좋은 것 같습니다! WebConfig에서 나눌 경우 API 엔드포인트가 변경되면 interceptor도 함께 바꿔줘야하기 때문)
Mile-Server/module-api/src/main/java/com/mile/common/auth/annotation/UserAuthAnnotation.java
Lines 9 to 14 in 56d0ca3
To Reviewers 📢