Skip to content

Commit

Permalink
Merge pull request #124 from KUIT-Space/hotfix/#123/로그인-성공시-userid-re…
Browse files Browse the repository at this point in the history
…turn

Hotfix/#123/로그인 성공시 userid return
  • Loading branch information
seongjunnoh authored Aug 18, 2024
2 parents cb97805 + 5612a38 commit d88f709
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import space.space_spring.dto.oAuth.KakaoInfo;
import space.space_spring.dto.oAuth.OAuthLoginResponse;
import space.space_spring.entity.User;
import space.space_spring.response.BaseResponse;
import space.space_spring.service.OAuthService;
Expand All @@ -35,7 +36,7 @@ public class OAuthController {
* 유저가 카카오 로그인 동의 시 호출될 콜백 함수
*/
@GetMapping("/callback/kakao")
public BaseResponse<String> kakaoCallback(@RequestParam(name = "code") String code, HttpServletResponse response) {
public BaseResponse<OAuthLoginResponse> kakaoCallback(@RequestParam(name = "code") String code, HttpServletResponse response) {

// TODO 1. 인가코드 받기
// 카카오 인증 서버는 서비스 서버의 Redirect URI로 인가 코드를 전달함
Expand Down Expand Up @@ -70,6 +71,6 @@ public BaseResponse<String> kakaoCallback(@RequestParam(name = "code") String co
response.setHeader("Authorization", "Bearer " + jwtOAuthLogin);
log.info("jwtOAuthLogin = {}", jwtOAuthLogin);

return new BaseResponse<>("카카오 로그인 성공");
return new BaseResponse<>(new OAuthLoginResponse(userByOAuthInfo.getUserId()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.springframework.web.bind.annotation.*;
import space.space_spring.dto.user.GetUserProfileListDto;
import space.space_spring.argumentResolver.jwtLogin.JwtLoginAuth;
import space.space_spring.dto.user.PostLoginDto;
import space.space_spring.dto.user.request.PostUserLoginRequest;
import space.space_spring.dto.user.request.PostUserSignupRequest;
import space.space_spring.dto.user.response.GetSpaceInfoForUserResponse;
Expand Down Expand Up @@ -49,15 +50,15 @@ public BaseResponse<String> signup(@Validated @RequestBody PostUserSignupRequest
* 로그인
*/
@PostMapping("/login")
public BaseResponse<String> login(@Validated @RequestBody PostUserLoginRequest postUserLoginRequest, BindingResult bindingResult, HttpServletResponse response) {
public BaseResponse<PostLoginDto.Response> login(@Validated @RequestBody PostLoginDto.Request request, BindingResult bindingResult, HttpServletResponse response) {
if (bindingResult.hasErrors()) {
throw new CustomException(INVALID_USER_LOGIN, getErrorMessage(bindingResult));
}

String jwtLogin = userService.login(postUserLoginRequest);
response.setHeader("Authorization", "Bearer " + jwtLogin);
PostLoginDto login = userService.login(request);
response.setHeader("Authorization", "Bearer " + login.getJwt());

return new BaseResponse<>("로컬 로그인 성공");
return new BaseResponse<>(new PostLoginDto.Response(login.getUserId()));
}

/**
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/space/space_spring/dto/oAuth/OAuthLoginResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package space.space_spring.dto.oAuth;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class OAuthLoginResponse {

private Long userId;
}
42 changes: 42 additions & 0 deletions src/main/java/space/space_spring/dto/user/PostLoginDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package space.space_spring.dto.user;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class PostLoginDto {

private String jwt;

private Long userId;

@Getter
@Setter
@NoArgsConstructor
public static class Request {
// '@', '.' 이 있어야 함
@Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$", message = "이메일 형식에 맞지 않습니다.")
@NotBlank
private String email;

@Pattern(
regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,16}$",
message = "8~16글자의 영문 대/소문자, 숫자, 특수문자가 포함되어야 합니다."
)
@NotBlank
private String password;
}

@Getter
@AllArgsConstructor
public static class Response {

private Long userId;
}
}
12 changes: 8 additions & 4 deletions src/main/java/space/space_spring/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.transaction.annotation.Transactional;
import space.space_spring.dao.UserSpaceDao;
import space.space_spring.dto.user.GetUserProfileListDto;
import space.space_spring.dto.user.PostLoginDto;
import space.space_spring.dto.user.dto.SpaceChoiceViewDto;
import space.space_spring.dto.user.request.PostUserLoginRequest;
import space.space_spring.dto.user.request.PostUserSignupRequest;
Expand Down Expand Up @@ -59,19 +60,22 @@ private void validateEmailForLocalSignup(String email) {
}

@Transactional
public String login(PostUserLoginRequest postUserLoginRequest) {
public PostLoginDto login(PostLoginDto.Request request) {
// TODO 1. 이메일 존재 여부 확인(아이디 존재 여부 확인)
User userByEmail = userUtils.findUserByEmail(postUserLoginRequest.getEmail(), LOCAL);
User userByEmail = userUtils.findUserByEmail(request.getEmail(), LOCAL);
log.info("userByEmail.getUserId: {}", userByEmail.getUserId());

// TODO 2. 비밀번호 일치 여부 확인
validatePassword(userByEmail, postUserLoginRequest.getPassword());
validatePassword(userByEmail, request.getPassword());

// TODO 3. JWT 발급
String jwtLogin = jwtLoginProvider.generateToken(userByEmail);
log.info("jwtLogin: {}", jwtLogin);

return jwtLogin;
return new PostLoginDto(
jwtLogin,
userByEmail.getUserId()
);
}

private void validatePassword(User userByEmail, String password) {
Expand Down

0 comments on commit d88f709

Please sign in to comment.