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: 소셜 로그인 시 랜딩할 페이지 결정에 사용할 헤더 추가 #64

Merged
merged 4 commits into from
Feb 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

public class SecurityConstant {

public static final String REGISTRATION_REQUIRED_HEADER = "Registration-Required";
public static final String LANDING_STATUS_HEADER = "Landing-Status";
public static final String TOKEN_ROLE_NAME = "role";
public static final String GITHUB_NAME_ATTR_KEY = "id";
public static final String ACCESS_TOKEN_HEADER_PREFIX = "Bearer ";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,12 @@ public class CustomOAuth2User extends DefaultOAuth2User {

private final Long memberId;
private final MemberRole memberRole;
private final LandingStatus landingStatus;

public CustomOAuth2User(OAuth2User oAuth2User, Member member) {
super(oAuth2User.getAuthorities(), oAuth2User.getAttributes(), GITHUB_NAME_ATTR_KEY);
this.memberId = member.getId();
this.memberRole = member.getRole();
}

public boolean isGuest() {
return memberRole == MemberRole.GUEST;
this.landingStatus = LandingStatus.of(member);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public void onAuthenticationSuccess(

CustomOAuth2User oAuth2User = (CustomOAuth2User) authentication.getPrincipal();

// 게스트 유저이면 회원가입 필요하므로 헤더 설정
response.setHeader(REGISTRATION_REQUIRED_HEADER, oAuth2User.isGuest() ? "true" : "false");
// 랜딩 페이지 결정에 필요한 정보를 헤더에 추가
response.setHeader(LANDING_STATUS_HEADER, oAuth2User.getLandingStatus().name());

// 토큰 생성 후 쿠키에 저장
AccessTokenDto accessTokenDto =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.gdschongik.gdsc.global.security;

import com.gdschongik.gdsc.domain.member.domain.Member;
import com.gdschongik.gdsc.domain.member.domain.RequirementStatus;

public enum LandingStatus {
TO_STUDENT_AUTHENTICATION, // 재학생 인증 페이지로 랜딩
TO_REGISTRATION, // 가입신청 페이지로 랜딩
TO_DASHBOARD, // 대시보드로 랜딩
;

public static LandingStatus of(Member member) {
// 아직 재학생 인증을 하지 않았다면 재학생 인증 페이지로 랜딩
if (member.getRequirement().getUnivStatus() == RequirementStatus.PENDING) {
return TO_STUDENT_AUTHENTICATION;
}

// 재학생 인증은 했지만 가입신청을 하지 않았다면 가입신청 페이지로 랜딩
// 가입신청 여부는 학번 존재여부로 판단
if (member.getStudentId() == null) {
return TO_REGISTRATION;
}
Comment on lines +20 to +22
Copy link
Member

Choose a reason for hiding this comment

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

멤버에 이 부분 확인하는 용도의 다른 필드가 있는 것보다 이렇게 학번으로 확인하는게 좋을까요?

Copy link
Member Author

@uwoobeat uwoobeat Feb 12, 2024

Choose a reason for hiding this comment

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

가입신청 상태만 따로 관리하는 필드가 있으면 가능할 것 같은데...

저희가 가입신청 상태를 멤버역할과 통합해서 관리하고 있고,
이때 가입신청서를 작성했든 작성하지 않았든 같은 GUEST라서 구별이 어려운 것 같아요
그래서 가입신청서 작성할 때 필드값 업데이트 치니까 필드값 null 여부로 판단한거긴 한데... 좀 마음에 안들긴 하죠

가입신청상태와 멤버상태를 분리할 수 있으면 좋긴 하겠네요. 더 명확하기도 하고요
일단 급하니까 임시로 필드값 널 여부로 처리하는 게 맞을 것 같아요~

Copy link
Member

Choose a reason for hiding this comment

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

여유가 있으면 분리하는게 좋을 것 같긴한데
일단은 이렇게 가고 이슈 새로 만들어서 나중에 여유가 생기면 처리해도 좋을 것 같습니다.

내부 구현이라 프론트 쪽에 영향이 있는 것도 아니니까요


// 재학생 인증과 가입신청을 모두 완료했다면 대시보드로 랜딩
return TO_DASHBOARD;
}
}
Loading