Skip to content

Commit 4fcf87b

Browse files
committed
feat : isFirstLogin 필드 추가, 첫 로그인은 ~/welcome 리다이렉트
1 parent dc91825 commit 4fcf87b

File tree

7 files changed

+30
-2
lines changed

7 files changed

+30
-2
lines changed

src/main/java/com/back/domain/user/dto/UserDto.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class UserDto {
2121
private Double abvDegree;
2222
private LocalDateTime createdAt;
2323
private LocalDateTime updatedAt;
24+
private boolean isFirstLogin;
2425

2526
public static UserDto from(User user) {
2627
if (user == null) return null;
@@ -32,6 +33,7 @@ public static UserDto from(User user) {
3233
.abvDegree(user.getAbvDegree())
3334
.createdAt(user.getCreatedAt())
3435
.updatedAt(user.getUpdatedAt())
36+
.isFirstLogin(user.isFirstLogin())
3537
.build();
3638
}
3739
}

src/main/java/com/back/domain/user/entity/User.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public class User {
5151
@Column(nullable = false, length = 20)
5252
private String role = "USER";
5353

54+
@Builder.Default
55+
@Column(nullable = false)
56+
private boolean isFirstLogin = true;
57+
5458
public boolean isAdmin() {
5559
return "ADMIN".equalsIgnoreCase(role);
5660
}

src/main/java/com/back/domain/user/service/UserAuthService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,10 @@ public void logout(HttpServletRequest request, HttpServletResponse response) {
143143
jwtUtil.removeAccessTokenCookie(response);
144144
jwtUtil.removeRefreshTokenCookie(response);
145145
}
146+
147+
@Transactional
148+
public void setFirstLoginFalse(Long id) {
149+
Optional<User> userOpt = userRepository.findById(id);
150+
userOpt.ifPresent(user -> user.setFirstLogin(false));
151+
}
146152
}

src/main/java/com/back/global/security/CustomAuthenticationFilter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ private void work(HttpServletRequest request, HttpServletResponse response, Filt
125125
user.getId(),
126126
user.getEmail(),
127127
user.getNickname(),
128+
user.isFirstLogin(),
128129
user.getAuthorities(),
129130
Map.of() // JWT 인증에서는 빈 attributes
130131
);

src/main/java/com/back/global/security/CustomOAuth2LoginSuccessHandler.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,17 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
2727
// Access Token과 Refresh Token 발급
2828
userAuthService.issueTokens(response, securityUser.getId(), securityUser.getEmail(), securityUser.getNickname());
2929

30-
// 프론트엔드로 리다이렉트
31-
String redirectUrl = frontendUrl + "/oauth/success";
30+
// 첫 로그인 여부에 따라 리다이렉트 분기
31+
String redirectUrl;
32+
33+
if (securityUser.isFirstLogin()) {
34+
// 첫 로그인이면 welcome 페이지로
35+
redirectUrl = frontendUrl + "oauth/success/welcome";
36+
userAuthService.setFirstLoginFalse(securityUser.getId());
37+
} else {
38+
// 일반 로그인이면 메인 페이지로
39+
redirectUrl = frontendUrl+"oauth/success";
40+
}
3241

3342
response.sendRedirect(redirectUrl);
3443
}

src/main/java/com/back/global/security/CustomOAuth2UserService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic
7070
user.getId(),
7171
userEmail,
7272
user.getNickname(),
73+
user.isFirstLogin(),
7374
user.getAuthorities(),
7475
oAuth2User.getAttributes()
7576
);

src/main/java/com/back/global/security/SecurityUser.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,25 @@ public class SecurityUser extends User implements OAuth2User {
1818
@Getter
1919
private String email;
2020

21+
@Getter
22+
private boolean isFirstLogin;
23+
2124
private Map<String, Object> attributes;
2225

2326
// OAuth2 전용 생성자 (패스워드 없음)
2427
public SecurityUser(
2528
long id,
2629
String email,
2730
String nickname,
31+
boolean isFirstLogin,
2832
Collection<? extends GrantedAuthority> authorities,
2933
Map<String, Object> attributes
3034
) {
3135
super(email, "", authorities); // OAuth2에서는 빈 패스워드
3236
this.id = id;
3337
this.nickname = nickname;
3438
this.email = email;
39+
this.isFirstLogin = isFirstLogin;
3540
this.attributes = attributes;
3641
}
3742

0 commit comments

Comments
 (0)