Skip to content

Commit

Permalink
Feat: 소셜로그인 회원가입 시 일어나는 닉네임 조작을 하나의 메서드로 모으고, 카카오와 네이버에 적용
Browse files Browse the repository at this point in the history
- 기존에 네이버에서 작업된 내용을 util로 만들어 양쪽 모두에 적용함.
- name도 길이 제한을 벗어나면 DB 삽입 시 에러가 발생하므로, 소셜로그인 시에는 규격화된 nickname과 같은 값을 쓰게 함.
- 테스트 오류로 인해 KakaoController의 code 파라미터명 명시
  • Loading branch information
GyungA committed Jul 13, 2024
1 parent 8a56932 commit 3696bed
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public class KakaoController {
@ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class)))
})
@RequestMapping(value = "/login/oauth2/code/kakao", method = {RequestMethod.GET, RequestMethod.POST})
public ResponseEntity<LoginResponse> kakaoLogin(@RequestParam String code, HttpServletResponse response) {
public ResponseEntity<LoginResponse> kakaoLogin(@RequestParam(name = "code") String code, HttpServletResponse response) {
String kakaoAccessToken = kakaoOauth.getKakaoAccessToken(code);
Map<String, Object> userInfo = kakaoOauth.getUserInfoFromKakaoToken(kakaoAccessToken);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ public class KakaoService {
public void kakaoSignUp(String kakaoUserId, String kakaoNickname){
String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8);
String encodedPassword = passwordEncoder.encode(randomPassword);
String generatedNickname = kakaoNickname + "#" + nicknameGenerator.generateRandomPostfix();
String formattedNickname = nicknameGenerator.formatNickname(kakaoNickname);

Users builtUser = Users.addUserBuilder()
.email(kakaoUserId+"@ustory.com")
.loginType(Users.LoginType.KAKAO)
.name(kakaoNickname)
.nickname(generatedNickname)
.name(formattedNickname)
.nickname(formattedNickname)
.password(encodedPassword)
.profileImgUrl("")
.profileDescription("자기소개")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,24 +39,13 @@ public class NaverService {
public void naverSignUp(String naverNickname, String naverEmail){
String randomPassword = String.valueOf(UUID.randomUUID()).substring(0,8);
String encodedPassword = passwordEncoder.encode(randomPassword);
// 닉네임에 포함된 특수문자를 제거한다.
String cleanedNickname = nicknameGenerator.normalizeNicknameForOAuth(naverNickname);
// 닉네임을 규정된 길이에 맞게 자른다.
String trimmedNickname = nicknameGenerator.trimNicknameForOAuth(cleanedNickname);
// 중복 여부를 조회한다. 중복이면 닉네임을 7자 이내로 자르고, 겹치지 않을 때까지 임의의 postfix 3글자를 만들어 붙인다.
if (nicknameGenerator.checkDuplicateNickname(trimmedNickname)) {
trimmedNickname = nicknameGenerator.trimNicknameForPostfix(trimmedNickname);

do {
trimmedNickname = trimmedNickname + nicknameGenerator.SEPARATOR + nicknameGenerator.generateRandomPostfix();
} while (nicknameGenerator.checkDuplicateNickname(trimmedNickname));
}
String formattedNickname = nicknameGenerator.formatNickname(naverNickname);

Users builtUser = Users.addUserBuilder()
.email(naverEmail)
.loginType(Users.LoginType.NAVER)
.name(trimmedNickname)
.nickname(trimmedNickname)
.name(formattedNickname)
.nickname(formattedNickname)
.password(encodedPassword)
.profileImgUrl("")
.profileDescription("자기소개")
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/elice/ustory/global/util/NicknameGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,23 @@ public class NicknameGenerator {
private static final int POSTFIX_LENGTH = 2;
private static final int POSTFIX_LENGTH_WITH_SEPARATOR = POSTFIX_LENGTH + 1;

public String formatNickname(String nickname) {
// 닉네임에 포함된 특수문자를 제거한다.
String formattedNickname = normalizeNicknameForOAuth(nickname);
// 닉네임을 규정된 길이에 맞게 자른다.
formattedNickname = trimNicknameForOAuth(nickname);
// 중복 여부를 조회한다. 중복이면 닉네임을 7자 이내로 자르고, 겹치지 않을 때까지 임의의 postfix 3글자를 만들어 붙인다.
if (checkDuplicateNickname(nickname)) {
formattedNickname = trimNicknameForPostfix(formattedNickname);

do {
formattedNickname = formattedNickname + SEPARATOR + generateRandomPostfix();
} while (checkDuplicateNickname(formattedNickname));
}

return formattedNickname;
}

public String generateRandomPostfix() {
int leftLimit = 48; // 숫자 '0'의 ASCII 코드
int rightLimit = 122; // 알파벳 'z'의 ASCII 코드
Expand Down

0 comments on commit 3696bed

Please sign in to comment.