Skip to content

Commit

Permalink
Merge pull request #84 from 9uttery/feat/login-response-fix-#83
Browse files Browse the repository at this point in the history
[Fix] 로그인 시 응답 DTO 수정
  • Loading branch information
mingeun0507 authored Feb 8, 2024
2 parents 6ac5afe + 485619e commit 920186f
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.guttery.madii.domain.user.application.dto;

import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "로그인 후 토큰 응답")
public record LoginResponse(
@Schema(description = "액세스 토큰", example = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs", defaultValue = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs")
String accessToken,
@Schema(description = "리프레시 토큰", example = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs", defaultValue = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs")
String refreshToken,
@Schema(description = "마케팅 수신 동의 여부", example = "true", defaultValue = "true")
boolean agreedMarketing,
@Schema(description = "프로필 등록 여부", example = "true", defaultValue = "true")
boolean hasProfile
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "로그인 및 리프레시 후 토큰 응답")
public record TokenResponse(
@Schema(description = "리프레시 후 토큰 응답")
public record RefreshResponse(
@Schema(description = "액세스 토큰", example = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs", defaultValue = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs")
String accessToken,
@Schema(description = "리프레시 토큰", example = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs", defaultValue = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QGdtYWlsLmNvbSIs")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
import com.guttery.madii.common.jwt.JwtProvider;
import com.guttery.madii.domain.user.application.dto.AppleLoginRequest;
import com.guttery.madii.domain.user.application.dto.KakaoLoginRequest;
import com.guttery.madii.domain.user.application.dto.LoginResponse;
import com.guttery.madii.domain.user.application.dto.NormalLoginRequest;
import com.guttery.madii.domain.user.application.dto.OidcDecodePayload;
import com.guttery.madii.domain.user.application.dto.RefreshResponse;
import com.guttery.madii.domain.user.application.dto.TokenRefreshRequest;
import com.guttery.madii.domain.user.application.dto.TokenResponse;
import com.guttery.madii.domain.user.domain.model.SocialInfo;
import com.guttery.madii.domain.user.domain.model.SocialProvider;
import com.guttery.madii.domain.user.domain.model.User;
Expand All @@ -33,26 +34,26 @@ public class LoginService {
private final AppleIdTokenDecodeService appleIdTokenDecodeService;

@Transactional(readOnly = true)
public TokenResponse normalLogin(final NormalLoginRequest normalLoginRequest) {
public LoginResponse normalLogin(final NormalLoginRequest normalLoginRequest) {
final User user = userRepository.findUserByLoginId(normalLoginRequest.loginId())
.orElseThrow(() -> CustomException.of(ErrorDetails.USER_NOT_FOUND));

// if (!bCryptPasswordEncoder.matches(normalLoginRequest.password(), user.getEncryptedPassword())) {
// throw CustomException.of(ErrorDetails.USER_NOT_FOUND);
// }

return new TokenResponse(jwtProvider.generateAccessToken(user.getUserId(), user.getRole()), jwtProvider.generateRefreshToken(user.getUserId(), user.getRole()));
return new LoginResponse(jwtProvider.generateAccessToken(user.getUserId(), user.getRole()), jwtProvider.generateRefreshToken(user.getUserId(), user.getRole()), user.getAgreesMarketing(), user.hasProfile());
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public TokenResponse kakaoLogin(final KakaoLoginRequest kakaoLoginRequest) {
public LoginResponse kakaoLogin(final KakaoLoginRequest kakaoLoginRequest) {
// ID 토큰으로 찾아온 유저 정보
final OidcDecodePayload oidcDecodePayload = kakaoIdTokenDecodeService.getPayloadFromIdToken(kakaoLoginRequest.idToken());

final User user = userRepository.findUserBySocialInfo(new SocialInfo(oidcDecodePayload.sub(), SocialProvider.KAKAO))
.orElseGet(() -> createNewKakaoUser(oidcDecodePayload));

return new TokenResponse(jwtProvider.generateAccessToken(user.getUserId(), user.getRole()), jwtProvider.generateRefreshToken(user.getUserId(), user.getRole()));
return new LoginResponse(jwtProvider.generateAccessToken(user.getUserId(), user.getRole()), jwtProvider.generateRefreshToken(user.getUserId(), user.getRole()), user.getAgreesMarketing(), user.hasProfile());
}

private User createNewKakaoUser(final OidcDecodePayload oidcDecodePayload) {
Expand All @@ -64,14 +65,14 @@ private User createNewKakaoUser(final OidcDecodePayload oidcDecodePayload) {
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public TokenResponse appleLogin(final AppleLoginRequest appleLoginRequest) {
public LoginResponse appleLogin(final AppleLoginRequest appleLoginRequest) {
// ID 토큰으로 찾아온 유저 정보
final OidcDecodePayload oidcDecodePayload = appleIdTokenDecodeService.getPayloadFromIdToken(appleLoginRequest.idToken());

final User user = userRepository.findUserBySocialInfo(new SocialInfo(oidcDecodePayload.sub(), SocialProvider.APPLE))
.orElseGet(() -> createNewAppleUser(oidcDecodePayload));

return new TokenResponse(jwtProvider.generateAccessToken(user.getUserId(), user.getRole()), jwtProvider.generateRefreshToken(user.getUserId(), user.getRole()));
return new LoginResponse(jwtProvider.generateAccessToken(user.getUserId(), user.getRole()), jwtProvider.generateRefreshToken(user.getUserId(), user.getRole()), user.getAgreesMarketing(), user.hasProfile());
}

private User createNewAppleUser(final OidcDecodePayload oidcDecodePayload) {
Expand All @@ -80,7 +81,7 @@ private User createNewAppleUser(final OidcDecodePayload oidcDecodePayload) {
return userRepository.save(newUser);
}

public TokenResponse refresh(final TokenRefreshRequest tokenRefreshRequest) {
return new TokenResponse(jwtProvider.reIssueAccessToken(tokenRefreshRequest.refreshToken()), jwtProvider.reIssueRefreshToken(tokenRefreshRequest.refreshToken()));
public RefreshResponse refresh(final TokenRefreshRequest tokenRefreshRequest) {
return new RefreshResponse(jwtProvider.reIssueAccessToken(tokenRefreshRequest.refreshToken()), jwtProvider.reIssueRefreshToken(tokenRefreshRequest.refreshToken()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public static User createNormalUser(String loginId, String password, Boolean agr
}

public static User createSocialUser(String socialId, SocialProvider provider) {
return new User(null, new SocialInfo(socialId, provider), null, false, Role.ROLE_USER);
return new User(null, new SocialInfo(socialId, provider), null, null, Role.ROLE_USER);
}

public void updateUserProfile(String nickname, String profileImage) {
Expand All @@ -69,4 +69,12 @@ public void unlinkSocialInfo() {
public String getEncryptedPassword() {
return loginInfo.getPassword();
}

public boolean agreedMarketing() {
return agreesMarketing;
}

public boolean hasProfile() {
return userProfile != null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

import com.guttery.madii.domain.user.application.dto.AppleLoginRequest;
import com.guttery.madii.domain.user.application.dto.KakaoLoginRequest;
import com.guttery.madii.domain.user.application.dto.LoginResponse;
import com.guttery.madii.domain.user.application.dto.NormalLoginRequest;
import com.guttery.madii.domain.user.application.dto.ProfileReadResponse;
import com.guttery.madii.domain.user.application.dto.ProfileUpdateRequest;
import com.guttery.madii.domain.user.application.dto.RefreshResponse;
import com.guttery.madii.domain.user.application.dto.SignUpRequest;
import com.guttery.madii.domain.user.application.dto.TokenRefreshRequest;
import com.guttery.madii.domain.user.application.dto.TokenResponse;
import com.guttery.madii.domain.user.application.dto.UpdateMarketingAgreementRequest;
import com.guttery.madii.domain.user.application.service.LoginService;
import com.guttery.madii.domain.user.application.service.ProfileService;
Expand Down Expand Up @@ -83,7 +84,7 @@ public void signUp(@Valid @RequestBody SignUpRequest signUpRequest) {
}
)
@Operation(summary = "일반 로그인 API", description = "일반 로그인 API입니다.")
public TokenResponse normalLogin(@Valid @RequestBody NormalLoginRequest normalLoginRequest) {
public LoginResponse normalLogin(@Valid @RequestBody NormalLoginRequest normalLoginRequest) {
return loginService.normalLogin(normalLoginRequest);
}

Expand All @@ -98,7 +99,7 @@ public TokenResponse normalLogin(@Valid @RequestBody NormalLoginRequest normalLo
}
)
@Operation(summary = "카카오 로그인 API", description = "카카오 로그인 API입니다.")
public TokenResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest kakaoLoginRequest) {
public LoginResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest kakaoLoginRequest) {
return loginService.kakaoLogin(kakaoLoginRequest);
}

Expand All @@ -113,7 +114,7 @@ public TokenResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest kakaoLogin
}
)
@Operation(summary = "애플 로그인 API", description = "애플 로그인 API입니다.")
public TokenResponse appleLogin(@Valid @RequestBody AppleLoginRequest appleLoginRequest) {
public LoginResponse appleLogin(@Valid @RequestBody AppleLoginRequest appleLoginRequest) {
return loginService.appleLogin(appleLoginRequest);
}

Expand Down Expand Up @@ -146,7 +147,7 @@ public void updateMarketingAgreement(
}
)
@Operation(summary = "토큰 리프레시 API", description = "토큰 리프레시 API입니다.")
public TokenResponse refresh(
public RefreshResponse refresh(
TokenRefreshRequest tokenRefreshRequest
) {
return loginService.refresh(tokenRefreshRequest);
Expand Down

0 comments on commit 920186f

Please sign in to comment.