[api] 회원 비밀번호 확인 추가
This commit is contained in:
@@ -3,19 +3,20 @@ package com.alist.api.modules.user;
|
||||
import com.alist.api.common.response.ApiResponse;
|
||||
import com.alist.api.common.response.ApiResponseCode;
|
||||
import com.alist.api.modules.user.form.MigrationUserForm;
|
||||
import com.alist.api.modules.user.form.UserPasswordChangeForm;
|
||||
import com.alist.api.modules.user.form.UserPasswordCheckForm;
|
||||
import com.alist.api.modules.user.form.UserSignupForm;
|
||||
import com.alist.api.modules.user.mapper.UserMapper;
|
||||
import com.alist.api.modules.user.service.UserService;
|
||||
import com.alist.api.modules.user.vo.MigrationUserVo;
|
||||
import com.alist.api.modules.user.vo.UserPasswordCheckVo;
|
||||
import com.alist.api.modules.user.vo.UserVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "05. 사용자 관리", description = "사용자 회원가입 및 관리 API")
|
||||
@Slf4j
|
||||
@@ -63,4 +64,45 @@ public class UserController {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "이전 회원");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "사용자 비밀번호 확인",
|
||||
description = "로그인한 사용자의 현재 비밀번호가 일치하는지 확인합니다."
|
||||
)
|
||||
@PostMapping("/password/check")
|
||||
public ResponseEntity<ApiResponse<UserPasswordCheckVo>> passwordCheck(
|
||||
@Valid @RequestBody UserPasswordCheckForm userPasswordCheckForm
|
||||
) {
|
||||
UserPasswordCheckVo result = userService.selectPasswordCheck(userPasswordCheckForm.toUserPasswordCheckDto());
|
||||
|
||||
if (!result.isPasswordMatched()) {
|
||||
if (result.getResultCode() == 4003) {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_4001);
|
||||
} else if (result.getResultCode() == 2003) {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
}
|
||||
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_200);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "사용자 비밀번호 수정",
|
||||
description = "로그인한 사용자의 현재 비밀번호를 확인한 뒤 새 비밀번호로 변경합니다."
|
||||
)
|
||||
@PatchMapping("/password")
|
||||
public ResponseEntity<ApiResponse<UserPasswordChangeVo>> updatePassword(
|
||||
@Valid @RequestBody UserPasswordChangeForm userPasswordChangeForm
|
||||
) {
|
||||
UserPasswordChangeVo result = userService.updatePassword(userPasswordChangeForm.toUserPasswordChangeDto());
|
||||
|
||||
if (!result.isPasswordChanged()) {
|
||||
if (result.getResultCode() == 4003 || result.getResultCode() == 4001) {
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_4001);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(result, ApiResponseCode.CODE_2005, "비밀번호 변경");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.alist.api.modules.user.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserPasswordChangeDto {
|
||||
private Integer userTokenIdx;
|
||||
private String currentPassword;
|
||||
private String newPassword;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.alist.api.modules.user.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserPasswordCheckDto {
|
||||
private Integer userTokenIdx;
|
||||
private String password;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.alist.api.modules.user.form;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserPasswordChangeForm {
|
||||
@NotBlank(message = "현재 비밀번호는 필수입니다.")
|
||||
private String currentPassword;
|
||||
|
||||
@NotBlank(message = "새 비밀번호는 필수입니다.")
|
||||
private String newPassword;
|
||||
|
||||
public UserPasswordChangeDto toUserPasswordChangeDto() {
|
||||
UserPasswordChangeDto dto = new UserPasswordChangeDto();
|
||||
dto.setCurrentPassword(currentPassword);
|
||||
dto.setNewPassword(newPassword);
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.alist.api.modules.user.form;
|
||||
|
||||
import com.alist.api.modules.user.dto.UserPasswordCheckDto;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserPasswordCheckForm {
|
||||
@NotBlank(message = "비밀번호는 필수입니다.")
|
||||
private String password;
|
||||
|
||||
public UserPasswordCheckDto toUserPasswordCheckDto() {
|
||||
UserPasswordCheckDto userPasswordCheckDto = new UserPasswordCheckDto();
|
||||
userPasswordCheckDto.setPassword(password);
|
||||
return userPasswordCheckDto;
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.alist.api.modules.user.mapper;
|
||||
|
||||
import com.alist.api.modules.user.dto.UserDto;
|
||||
import com.alist.api.modules.user.dto.UserTokenDto;
|
||||
import com.alist.api.modules.user.vo.UserVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
@@ -11,4 +12,6 @@ public interface UserMapper {
|
||||
int insertUserSignup(UserDto userDto);
|
||||
|
||||
int insertUserTokenSignup(UserTokenDto userTokenDto);
|
||||
|
||||
UserVo selectUserByUserIdx(Integer userIdx);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.alist.api.modules.user.service;
|
||||
|
||||
import com.alist.api.common.utils.ApiKeyGenerator;
|
||||
import com.alist.api.common.utils.SecurityUtil;
|
||||
import com.alist.api.modules.migration.alist.user.dto.AlistUserDto;
|
||||
import com.alist.api.modules.migration.alist.user.service.AlistUserService;
|
||||
import com.alist.api.modules.migration.alist.user.vo.AlistUserVo;
|
||||
@@ -8,9 +9,11 @@ import com.alist.api.modules.migration.eltown.user.dto.EltownUserDto;
|
||||
import com.alist.api.modules.migration.eltown.user.service.EltownUserService;
|
||||
import com.alist.api.modules.migration.eltown.user.vo.EltownUserVo;
|
||||
import com.alist.api.modules.user.dto.UserDto;
|
||||
import com.alist.api.modules.user.dto.UserPasswordCheckDto;
|
||||
import com.alist.api.modules.user.dto.UserTokenDto;
|
||||
import com.alist.api.modules.user.mapper.UserMapper;
|
||||
import com.alist.api.modules.user.vo.MigrationUserVo;
|
||||
import com.alist.api.modules.user.vo.UserPasswordCheckVo;
|
||||
import com.alist.api.modules.user.vo.UserVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
@@ -107,4 +110,39 @@ public class UserService {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public UserPasswordCheckVo selectPasswordCheck(UserPasswordCheckDto userPasswordCheckDto) {
|
||||
UserPasswordCheckVo result = new UserPasswordCheckVo();
|
||||
|
||||
Integer userTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||
userPasswordCheckDto.setUserTokenIdx(userTokenIdx);
|
||||
|
||||
if (userTokenIdx == null || userPasswordCheckDto.getPassword() == null) {
|
||||
result.setPasswordMatched(false);
|
||||
result.setResultCode(4003);
|
||||
return result;
|
||||
}
|
||||
|
||||
UserVo userVo = userMapper.selectUserByUserIdx(userPasswordCheckDto.getUserTokenIdx());
|
||||
|
||||
if (userVo == null || userVo.getPassword() == null) {
|
||||
result.setPasswordMatched(false);
|
||||
result.setResultCode(2003);
|
||||
return result;
|
||||
}
|
||||
|
||||
boolean matched = passwordEncoder.matches(userPasswordCheckDto.getPassword(), userVo.getPassword());
|
||||
|
||||
if (!matched) {
|
||||
result.setPasswordMatched(false);
|
||||
result.setResultCode(2003);
|
||||
return result;
|
||||
}
|
||||
|
||||
result.setPasswordMatched(true);
|
||||
result.setResultCode(200);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.alist.api.modules.user.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserPasswordCheckVo {
|
||||
private boolean passwordMatched;
|
||||
|
||||
@JsonIgnore
|
||||
private Integer resultCode;
|
||||
}
|
||||
@@ -20,4 +20,14 @@
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="selectUserByUserIdx" resultType="com.alist.api.modules.user.vo.UserVo">
|
||||
/*UserMapper.selectUserByUserIdx*/
|
||||
SELECT ATU.user_idx
|
||||
, ATU.password
|
||||
FROM ALISTLMS.test_user ATU
|
||||
INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx
|
||||
WHERE ATUT.user_token_idx = #{userTokenIdx}
|
||||
AND ATU.del_yn = 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user