Skip to content

Commit 18951f0

Browse files
committed
❇️ 로그인/회원가입시 email정보 추가저장
1 parent 04784bb commit 18951f0

File tree

12 files changed

+67
-75
lines changed

12 files changed

+67
-75
lines changed

src/main/java/com/boggle_boggle/bbegok/controller/AppleController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.boggle_boggle.bbegok.controller;
22

3-
import com.boggle_boggle.bbegok.dto.base.DataResponseDto;
43
import com.boggle_boggle.bbegok.entity.user.User;
54
import com.boggle_boggle.bbegok.exception.exception.GeneralException;
6-
import com.boggle_boggle.bbegok.service.AppleService;
5+
import com.boggle_boggle.bbegok.oauth.service.AppleService;
76
import jakarta.servlet.http.HttpServletRequest;
87
import jakarta.servlet.http.HttpServletResponse;
98
import lombok.RequiredArgsConstructor;

src/main/java/com/boggle_boggle/bbegok/controller/UserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.boggle_boggle.bbegok.dto.base.DataResponseDto;
55
import com.boggle_boggle.bbegok.dto.request.NickNameRequest;
66
import com.boggle_boggle.bbegok.dto.response.TermsResponse;
7-
import com.boggle_boggle.bbegok.service.RevokeService;
7+
import com.boggle_boggle.bbegok.oauth.service.RevokeService;
88
import com.boggle_boggle.bbegok.service.UserService;
99
import com.boggle_boggle.bbegok.utils.CookieUtil;
1010
import jakarta.servlet.http.HttpServletRequest;

src/main/java/com/boggle_boggle/bbegok/entity/Terms.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class Terms {
1919
@Column(name = "title", nullable = false)
2020
private String title;
2121

22-
@Column(name = "content", nullable = false, length = 1000)
22+
@Column(name = "content", nullable = false, length = 10000)
2323
private String content;
2424

2525
@Column(name = "version", nullable = false)

src/main/java/com/boggle_boggle/bbegok/entity/user/User.java

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import lombok.NoArgsConstructor;
1111
import lombok.Setter;
1212
import net.minidev.json.annotate.JsonIgnore;
13+
import org.hibernate.annotations.CreationTimestamp;
14+
import org.hibernate.annotations.UpdateTimestamp;
1315

1416
import java.time.LocalDateTime;
1517

@@ -32,11 +34,6 @@ public class User {
3234
@Column(name = "user_name", unique = true, length = 12)
3335
private String userName = null;
3436

35-
@JsonIgnore
36-
@Column(name = "password", length = 128)
37-
@Size(max = 128)
38-
private String password;
39-
4037
@JsonIgnore
4138
@Column(name = "oauth2_access_token", length = 512)
4239
private String oauth2AccessToken;
@@ -45,17 +42,10 @@ public class User {
4542
@Column(name = "oauth2_refresh_token", length = 512)
4643
private String oauth2RefreshToken;
4744

48-
@Column(name = "email", length = 512, unique = true, nullable = true)
45+
@Column(name = "email", length = 512)
4946
@Size(max = 512)
5047
private String email;
5148

52-
@Column(name = "email_verified_yn", length = 1)
53-
@Size(min = 1, max = 1)
54-
private String emailVerifiedYn;
55-
56-
@Column(name = "profile_image_url", length = 512, nullable = true)
57-
private String profileImageUrl = null;
58-
5949
@Column(name = "provider_type", length = 20)
6050
@Enumerated(EnumType.STRING)
6151
@NotNull
@@ -69,12 +59,14 @@ public class User {
6959
@Column(name = "agreed_version", length = 10)
7060
private String agreedVersion;
7161

72-
@Column(name = "created_at")
62+
@CreationTimestamp
63+
@Column(updatable = false, name = "created_at")
7364
@NotNull
74-
private LocalDateTime createdAt;
65+
private LocalDateTime createdAt = LocalDateTime.now();
7566

76-
@Column(name = "modified_at")
77-
private LocalDateTime modifiedAt;
67+
@UpdateTimestamp
68+
@Column(name = "modified_at", insertable = false)
69+
private LocalDateTime modifiedAt = LocalDateTime.now();
7870

7971
@Column(name = "is_deleted")
8072
@NotNull
@@ -88,61 +80,48 @@ protected User(){}
8880

8981
protected User(
9082
String userId,
91-
String emailVerifiedYn,
9283
ProviderType providerType,
93-
RoleType roleType,
94-
LocalDateTime createdAt,
95-
LocalDateTime modifiedAt) {
84+
String email,
85+
RoleType roleType) {
9686
this.userId = userId;
97-
this.emailVerifiedYn = emailVerifiedYn;
9887
this.providerType = providerType;
9988
this.roleType = roleType;
100-
this.createdAt = createdAt;
101-
this.modifiedAt = modifiedAt;
89+
this.email = email;
10290
}
10391

10492

10593
protected User(
10694
String userId,
107-
String emailVerifiedYn,
10895
ProviderType providerType,
96+
String email,
10997
RoleType roleType,
110-
LocalDateTime createdAt,
111-
LocalDateTime modifiedAt,
11298
String accessToken,
11399
String refreshToken) {
114100
this.userId = userId;
115-
this.emailVerifiedYn = emailVerifiedYn;
116101
this.providerType = providerType;
102+
this.email = email;
117103
this.roleType = roleType;
118-
this.createdAt = createdAt;
119-
this.modifiedAt = modifiedAt;
120104
this.oauth2AccessToken = accessToken;
121105
this.oauth2RefreshToken = refreshToken;
122106
}
123107

124-
125108
public static User createUser(
126109
@NotNull String userId,
127-
@NotNull String emailVerifiedYn,
128110
@NotNull ProviderType providerType,
129-
@NotNull RoleType roleType,
130-
@NotNull LocalDateTime createdAt,
131-
@NotNull LocalDateTime modifiedAt){
132-
return new User(userId, emailVerifiedYn, providerType, roleType, createdAt, modifiedAt);
111+
String email,
112+
@NotNull RoleType roleType){
113+
return new User(userId, providerType, email, roleType);
133114
}
134115

135116
public static User createUser(
136117
@NotNull String userId,
137-
@NotNull String emailVerifiedYn,
138118
@NotNull ProviderType providerType,
119+
String email,
139120
@NotNull RoleType roleType,
140-
@NotNull LocalDateTime createdAt,
141-
@NotNull LocalDateTime modifiedAt,
142121
@NotNull String accessToken,
143122
@NotNull String refreshToken
144123
){
145-
return new User(userId, emailVerifiedYn, providerType, roleType, createdAt, modifiedAt, accessToken, refreshToken);
124+
return new User(userId, providerType, email, roleType, accessToken, refreshToken);
146125
}
147126

148127
public void updateNickName(String nickName){
@@ -160,8 +139,12 @@ public void updateGuestToUser(String latestVersion) {
160139
this.agreedVersion = latestVersion;
161140
}
162141

163-
public void updateAccessToken(String accessToken, String refreshToken) {
142+
public void updateToken(String accessToken, String refreshToken) {
164143
this.oauth2AccessToken = accessToken;
165144
this.oauth2RefreshToken = refreshToken;
166145
}
146+
147+
public void updateEmail(String email) {
148+
this.email = email;
149+
}
167150
}

src/main/java/com/boggle_boggle/bbegok/oauth/entity/UserPrincipal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public OidcIdToken getIdToken() {
8787
public static UserPrincipal create(User user) {
8888
return new UserPrincipal(
8989
user.getUserId(),
90-
user.getPassword(),
90+
null,
9191
user.getProviderType(),
9292
user.getRoleType(),
9393
Collections.singletonList(new SimpleGrantedAuthority(user.getRoleType().getCode()))

src/main/java/com/boggle_boggle/bbegok/oauth/info/OAuth2UserInfo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ public Map<String, Object> getAttributes() {
1818

1919
public abstract String getId();
2020

21+
public abstract String getEmail();
22+
2123
}

src/main/java/com/boggle_boggle/bbegok/oauth/info/impl/GoogleOAuth2UserInfo.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,9 @@ public GoogleOAuth2UserInfo(Map<String, Object> attributes) {
1414
public String getId() {
1515
return String.valueOf(attributes.get("sub"));
1616
}
17+
18+
@Override
19+
public String getEmail() {
20+
return (String) attributes.get("email");
21+
}
1722
}

src/main/java/com/boggle_boggle/bbegok/oauth/info/impl/KakaoOAuth2UserInfo.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.Map;
66

77
/** Kakao OAuth정보로부터 가져올 데이터들을 재정의
8-
* 빼곡은 오직 식별자만 필요로 한다.
98
*/
109
public class KakaoOAuth2UserInfo extends OAuth2UserInfo {
1110

@@ -17,4 +16,9 @@ public KakaoOAuth2UserInfo(Map<String, Object> attributes) {
1716
public String getId() {
1817
return String.valueOf(attributes.get("id"));
1918
}
19+
20+
@Override
21+
public String getEmail() {
22+
return (String) attributes.get("email");
23+
}
2024
}

src/main/java/com/boggle_boggle/bbegok/service/AppleService.java renamed to src/main/java/com/boggle_boggle/bbegok/oauth/service/AppleService.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.boggle_boggle.bbegok.service;
1+
package com.boggle_boggle.bbegok.oauth.service;
22

33
import com.boggle_boggle.bbegok.config.properties.AppProperties;
44
import com.boggle_boggle.bbegok.config.properties.AppleProperties;
@@ -8,11 +8,13 @@
88
import com.boggle_boggle.bbegok.oauth.entity.ProviderType;
99
import com.boggle_boggle.bbegok.oauth.entity.RoleType;
1010
import com.boggle_boggle.bbegok.oauth.exception.OAuthProviderMissMatchException;
11+
import com.boggle_boggle.bbegok.oauth.info.OAuth2UserInfo;
1112
import com.boggle_boggle.bbegok.oauth.token.AuthToken;
1213
import com.boggle_boggle.bbegok.oauth.token.AuthTokenProvider;
1314
import com.boggle_boggle.bbegok.repository.user.UserRefreshTokenRepository;
1415
import com.boggle_boggle.bbegok.repository.user.UserRepository;
1516
import com.boggle_boggle.bbegok.repository.user.UserSettingsRepository;
17+
import com.boggle_boggle.bbegok.service.AccessTokenService;
1618
import com.boggle_boggle.bbegok.utils.CookieUtil;
1719
import com.boggle_boggle.bbegok.utils.UuidUtil;
1820
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -27,6 +29,7 @@
2729
import net.minidev.json.parser.JSONParser;
2830
import net.minidev.json.parser.ParseException;
2931
import org.springframework.boot.context.properties.EnableConfigurationProperties;
32+
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
3033
import org.springframework.stereotype.Service;
3134
import org.springframework.web.util.UriComponentsBuilder;
3235

@@ -70,6 +73,8 @@ public User process(String code) {
7073
JSONObject payload = objectMapper.readValue(getPayload.toJSONObject().toJSONString(), JSONObject.class);
7174

7275
String userId = String.valueOf(payload.get("sub"));
76+
String userEmail = String.valueOf(payload.get("email"));
77+
7378
savedUser = userRepository.findByUserIdAndIsDeleted(userId, false);
7479

7580
if (savedUser != null) { //서로 다른 인증제공자간 충돌을 방지
@@ -79,9 +84,10 @@ public User process(String code) {
7984
" account. Please use your " + savedUser.getProviderType() + " account to login."
8085
);
8186
}
82-
savedUser.updateAccessToken(accessToken, refreshToken);
87+
savedUser.updateToken(accessToken, refreshToken);
88+
savedUser.updateEmail(userEmail);
8389
} else {
84-
savedUser = createAppleUser(userId,accessToken, refreshToken);
90+
savedUser = createAppleUser(userId, userEmail, accessToken, refreshToken);
8591
userSettingsRepository.saveAndFlush(UserSettings.createUserSettings(savedUser));
8692
}
8793

@@ -123,16 +129,13 @@ public String determineSuccessRedirectUrl(String accessToken, String baseUrl) {
123129
.build().toUriString();
124130
}
125131

126-
private User createAppleUser(String userId, String accessToken, String refreshToken) {
127-
log.debug("# ACCESS TOKEN =>>>>> {}",accessToken);
132+
private User createAppleUser(String userId, String userEmail, String accessToken, String refreshToken) {
128133
LocalDateTime now = LocalDateTime.now();
129134
User user = User.createUser(
130135
userId,
131-
"Y",
132136
ProviderType.APPLE,
137+
userEmail,
133138
RoleType.GUEST,
134-
now,
135-
now,
136139
accessToken,
137140
refreshToken
138141
);

src/main/java/com/boggle_boggle/bbegok/oauth/service/CustomOAuth2UserService.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic
4646

4747
private OAuth2User process(OAuth2UserRequest userRequest, OAuth2User user) {
4848
ProviderType providerType = ProviderType.valueOf(userRequest.getClientRegistration().getRegistrationId().toUpperCase());
49-
String userId = user.getName(); //OAuth2에서 제공하는 고유식별자
50-
User savedUser = userRepository.findByUserIdAndIsDeleted(userId, false);
49+
OAuth2UserInfo userInfo = OAuth2UserInfoFactory.getOAuth2UserInfo(providerType, user.getAttributes());
50+
User savedUser = userRepository.findByUserIdAndIsDeleted(userInfo.getId(), false);
5151

5252
if (savedUser != null) { //서로 다른 인증제공자간 충돌을 방지
5353
if (providerType != savedUser.getProviderType()) {
@@ -56,27 +56,29 @@ private OAuth2User process(OAuth2UserRequest userRequest, OAuth2User user) {
5656
" account. Please use your " + savedUser.getProviderType() + " account to login."
5757
);
5858
}
59-
//기존 가입자에게 셋팅정보가 없다면 생성
60-
if(userSettingsRepository.findByUser(savedUser) == null) userSettingsRepository.saveAndFlush(UserSettings.createUserSettings(savedUser));
59+
updateUser(savedUser, userInfo);
6160
} else {
6261
//가입한적 없다면 회원가입을 진행.
63-
savedUser = createUser(userId, providerType);
62+
savedUser = createUser(userInfo, providerType);
6463
userSettingsRepository.saveAndFlush(UserSettings.createUserSettings(savedUser));
6564
}
6665

6766
//이미 가입한 유저라면 가입한 유저, 회원가입했다면 회원가입할 유저의 정보를 리턴
6867
return UserPrincipal.create(savedUser, user.getAttributes());
6968
}
7069

71-
private User createUser(String userId, ProviderType providerType) {
72-
LocalDateTime now = LocalDateTime.now();
70+
private void updateUser(User user, OAuth2UserInfo userInfo) {
71+
if (userInfo.getEmail() != null && !user.getEmail().equals(userInfo.getEmail())) {
72+
user.updateEmail(userInfo.getEmail());
73+
}
74+
}
75+
76+
private User createUser(OAuth2UserInfo userInfo, ProviderType providerType) {
7377
User user = User.createUser(
74-
userId,
75-
"Y",
78+
userInfo.getId(),
7679
providerType,
77-
RoleType.GUEST,
78-
now,
79-
now
80+
userInfo.getEmail(),
81+
RoleType.GUEST
8082
);
8183

8284
return userRepository.saveAndFlush(user);

0 commit comments

Comments
 (0)